为什么tkFileDialog.askopenfilename之后的tk.Button.configure只在方法离开后生效?

时间:2016-10-21 12:54:03

标签: python tkinter

在下面的代码摘录中,它使用一个勾选框和一个按钮绘制一个简单的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()

0 个答案:

没有答案