我正在创建一个名为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.我希望输出仅在用户输入后显示。我怎么能这样做?
答案 0 :(得分:1)
首先,我不认为你真的想推迟返回__init__
方法。如果您这样做,您的代码将永远不会到达tk.mainloop()
,并且永远不会真正出现在屏幕上。
相反,当Entry
窗口小部件中的数据发生更改时,将通知您要执行的操作。这在GUI工具包中很常见; tkinter处理它的方式是使用Events和Bindings。您可以通常here了解它们。
执行特定任务的一种方法(在用户更改后显示self.entry
中的数据)可能是使用方法shown in this question。
或者,您可以在提交按钮(see here)中添加command
并读取该方法中条目的值。