在下面的代码摘录中,它使用一个勾选框和一个按钮绘制一个简单的GUI,我想在按下按钮并且用户选择了一个文件后按下按钮说明及其缓解(遵循通过耗时的计算)。
名为select_master_button
的按钮绑定到命令SelectMaster
。
在SelectMaster
方法中,configure
按钮指令直接放在tkFileDialog.askopenfilename
调用之后。
这个想法是让按钮的描述和浮雕改变,以便用户知道处理活动。
但是,当用户选择文件并离开文件对话框时,按钮配置没有变化,只有在整个方法完成后,按钮配置才会生效。
在此示例中,最后一条指令恢复按钮的释放并告诉用户文件选择处于活动状态。这当然可以正常工作,因为它是方法离开之前的最后一条指令。
为什么tk.Button.configure
tkFileDialog.askopenfilename
仅在方法结束后才生效?
我使用的是Python 2.7。
我理解在文件对话框之前放置按钮configure
会提供补救措施,但我还是想了解当前的行为。
# -*- coding: utf-8 -*-
import Tkinter as tk
import tkFileDialog
import tkMessageBox
from openpyxl import Workbook, load_workbook
class MyApp():
def __init__(self, parent):
self.sort_tick_value = tk.IntVar()
self.sort_tick_value.set(1)
### GUI ###
self.myParent = parent
self.myParent.geometry("400x400")
self.myContainer = tk.Frame(parent)
self.myContainer.pack(expand=tk.YES, fill=tk.BOTH, padx=10, pady=5,
ipadx=5, ipady=5)
self.sort_selection_frame = tk.Frame(self.myContainer)
self.sort_selection_frame.pack(side=tk.TOP, expand=tk.NO, fill=tk.BOTH,
pady=10)
self.select_master_frame = tk.Frame(self.myContainer)
self.select_master_frame.pack(side=tk.TOP, expand=tk.NO, fill=tk.BOTH,
pady=10)
#### Tick Box ####
self.sort_tick_box =tk.Checkbutton(self.sort_selection_frame,
text="Sort in groups",
variable=self.sort_tick_value)
self.sort_tick_box.pack(side=tk.TOP, anchor=tk.W)
#### Choose Master File Button ####
self.select_master_button = tk.Button(self.select_master_frame)
self.select_master_button.configure(text="Select master file - "
".xlsx\n(optional)",
command=self.SelectMaster)
self.select_master_button.pack(side = tk.TOP, anchor=tk.N)
def SelectMaster(self):
selected_master = tkFileDialog.askopenfilename(
parent=root, title='Choose the master file', initialdir = 'D:/')
self.select_master_button.configure(text="Select master file - "
".xlsx\n(scanning file, "
"please wait)", relief=tk.SUNKEN)
print "Scanning the selected master file ..."
wb = load_workbook(selected_master, read_only=True)
ws = wb.active
while …:
# time consuming calculation ...
self.select_master_button.configure(text="Select master file\n(active)",
relief=tk.RAISED)
root = tk.Tk()
root.wm_title("Title“)
myApp = MyApp(root)
root.mainloop()