如何使用Tkinter事件暂停脚本?

时间:2014-06-22 21:08:07

标签: python tkinter

我正在创建一个名为Dialog的简单类。我只希望它在 init 方法已经完成时返回。

from tkinter import *
class Dialog:
    def __set_data(self):
        self.data = self.entry_.get()
        self.top.destroy()
    def __init__(self, prompt_text = "Prompt:", submit_text = "OK", text_size = 5, button_size = 5,  main_window = Tk()):
        main_window.withdraw()
        top = self.top = Toplevel(main_window)
        Label(top, text=prompt_text).pack()
        self.entry_ = Entry(top)
        self.entry_.pack(padx = text_size)
        button = Button(top, text = submit_text, command = self.__set_data)
        button.pack(pady=button_size)

    def get_data(self):
        return self.data
    data = 0

a = Dialog();
print (a.get_data())

如果运行此代码,您将获得输出0.我希望输出仅在用户输入后显示。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

首先,我不认为你真的想推迟返回__init__方法。如果您这样做,您的代码将永远不会到达tk.mainloop(),并且永远不会真正出现在屏幕上。

相反,当Entry窗口小部件中的数据发生更改时,将通知您要执行的操作。这在GUI工具包中很常见; tkinter处理它的方式是使用Events和Bindings。您可以通常here了解它们。

执行特定任务的一种方法(在用户更改后显示self.entry中的数据)可能是使用方法shown in this question

或者,您可以在提交按钮(see here)中添加command并读取该方法中条目的值。