Отключить главное окно, пока окно TopLevel все еще работает [дубликат]Python

Программы на Python
Anonymous
Отключить главное окно, пока окно TopLevel все еще работает [дубликат]

Сообщение Anonymous »

Я пытаюсь сделать следующее:
  • Главное окно — пользователь нажимает [Загрузить файл]
  • Открывает диалоговое окно, пользователь выбирает файл Excel
  • Появляется мини-окно верхнего уровня, в котором пользователю предлагается выбрать лист из поля со списком, нажмите «Выбрать»
  • Мини-окно верхнего уровня закрывается, в главном окне отображается Excel в виде дерева
Части 1, 2, 4 работают. Сейчас я пытаюсь написать часть 3.
Проблема, с которой, как мне кажется, я столкнулся; когда появляется мини-окно TopLevel, главное окно все еще работает и ожидает отображения «имени листа» в TreeView. Таким образом, перед тем, как пользователь сможет выполнить часть 3, отображается ошибка, что имя листа имеет значение «null».
Ниже код представляет собой части 1,2,4

Код: Выделить всё

# Function to load data from Excel to Treeview
def load_data_func():
global filepath, excel_file
# Clear existing data in Treeview
for item in treeview.get_children():
treeview.delete(item)

# Read Excel File
print("filepath = ", filepath)
excel_name = os.path.basename(filepath)
FileName_display.config(text=f"{excel_name}")   # Display Filename

excel_file = pd.ExcelFile(filepath)                     # Excel File without specific sheet

# Open ChooseSheet_Dialog to choose sheet
selected_sheet = ""
selected_sheet = show_sheet_window(excel_name)
excel_sheet = excel_file.parse(selected_sheet)          # Excel File with specific sheet

# Set Treeview Header
treeview["columns"] = list(excel_sheet.columns)
#treeview["show"] = "headings"                          # Hide the default first column
for col in excel_sheet.columns:
treeview.heading(col, text=col)
treeview.column(col, width=100, minwidth=150, stretch=False)

# Insert data rows to Treeview
for index, row in excel_sheet.iterrows():
treeview.insert("", "end", values=list(row))
Приведенный ниже код представляет собой часть 3, вызывающую ошибку.

Код: Выделить всё

# Function to open child window for user to choose sheet
def show_sheet_window(excel_name):
global excel_file
list_of_sheets = excel_file.sheet_names
chosen_ComboValue = ""                                  # Variable to store Chosen Sheetname later
print("List of sheets = ", list_of_sheets)

# Find a way to compare header and take only legit sheets
# ------------

# Create Window
chooseSheet_Box = tk.Toplevel(root)
chooseSheet_Box.title("Select a Sheet Name")
chooseSheet_Box.geometry("300x100")

# Disable Main Window
chooseSheet_Box.grab_set()
chooseSheet_Box.transient(root)                         # Ensure in front

# Create Frame
CS_Frame = ttk.Frame(chooseSheet_Box, padding=20)
CS_Frame.pack(fill="both", expand=True)

CS_FileName_label = ttk.Label(CS_Frame, text="File Name:")
CS_FileName_display = ttk.Label(CS_Frame, text=excel_name)
CS_FileName_label.grid(row=0, column=0)
CS_FileName_display.grid(row=0, column=1)

CS_Sheet_label = ttk.Label(CS_Frame, text="Choose Sheet:")
CS_Combobox = ttk.Combobox(CS_Frame, values=list_of_sheets)
CS_Combobox.current(2)
CS_Sheet_label.grid(row=1, column=0)
CS_Combobox.grid(row=1, column=1)

# Function to get Selected Sheet from Combobox
def chosen_Sheet():
global chosen_ComboValue
chosen_ComboValue = CS_Combobox.get()
chooseSheet_Box.destroy()

CS_Select_btn = ttk.Button(CS_Frame, text="Select", command=chosen_Sheet)
CS_Select_btn.grid(row=2, column=0)

print("Chosen Sheet = ", chosen_ComboValue)
return chosen_ComboValue
Моя консоль показывает следующую ошибку после того, как пользователь выбирает файл Excel:

путь к файлу = /ECS200, серийный номер 2020-2023.xls
Список листов = ['2022', '2021', '2020', 'SAMPLE', 'Notes']
Выбранный лист =

Как видите, Выбранный лист = «ничего». Но пользователь даже не получил возможности выбрать лист, когда появилось мини-окно TopLevel.
Как приостановить главное окно и дождаться ввода данных в мини-окне, а затем возобновить?

Вернуться в «Python»