我试图在最后一小时寻找这个问题的答案,但我还没有找到任何答案。 (我觉得这应该在互联网上)。
当您单击父GUI框架上的按钮时,我正在尝试创建自定义弹出窗口。然后我希望用户输入变量,然后将这些变量返回到原始类。我本质上是一个弹出窗口输入选项。但是,我应该注意,并非所有选项都必须输入,它只取决于用户的情况。用户可以点击"选项"按钮在任何时候都是,所以当弹出窗口退出时,我希望它在最初命中选项按钮时返回到父GUI。我正在做的是以下内容:
from Tkinter import *
class Home(Frame): #This class defines the main(master) GUI
def __init__(self, master):
Frame.__init__(self, master)
#Other methods in class "Home" that get, variables, etc.
def call_popup(self):
options_popup = Options(self)
#wait_window does not work here
self.master.wait_window(options_popup)
class Options(Toplevel): #This class defines the popup GUI
def __init__(self, master):
Toplevel.__init__(self, master)
self.popup = self
#Other methods in class "Options"
def get_variable(self): #Just an example methods in class "Options"
#Simplified code but lets say I now have the variable foo in self.foo, unique to class "Options"
#I want to pass this variable back to class "Home"
def exit_popup(self):
self.popup.destroy()
#I want it to return to the spot that the user was originally at
#when they hit the "options button" in the home GUI. I also want all
#values inputted in the "options" popup to return to the class "Home"
root = Tk()
Home(root)
root.mainloop()
我相信问题的一个(很大一部分)是我对类(以及Tkinter)很新。
我看过很多关于tkinter,popups,继承类和wait_window的问题,遗憾的是我仍然无法解决这个问题。
我也试过通过课程"选项"像这样:def __init__(self, master, options):
(第3行),但它超过了参数的数量。
所以,主要问题: - 如何从弹出/类"选项"中传递变量?上课"家庭"? - 你有怎样的弹出/课程"选项"窗口等到关闭才恢复到班级" Home"?
答案 0 :(得分:0)
好。我相信我已经在您的代码中实现了您遇到问题的内容,请参阅下面的进一步说明:
from Tkinter import *
class Home(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.entryvalue = None # this will store the popop entry value
self.call_popup(self)
print("Popup closed!")
print("Entry value:" + self.entryvalue)
def call_popup(self, master):
options_popup = Options(master)
options_popup.wait_window()
class Options(Toplevel):
def __init__(self, master):
Toplevel.__init__(self, master)
self.master = master
# add an entry widget
self.e1 = Entry(self)
self.e1.pack()
# add a button
b1 = Button(self, text="Popup button", command=self.buttonpressed)
b1.pack()
def buttonpressed(self):
self.master.entryvalue = self.e1.get()
self.exit_popup()
def exit_popup(self):
self.destroy()
root = Tk()
Home(root)
root.mainloop()
第一个问题。您需要为popup / options对象提供对您希望数据结束的对象的引用,在本例中为home对象。正如您所看到的,我将此作为弹出窗口的 init 方法的新参数传递。然后,我在按钮上添加了一个命令,然后在home对象中设置entryvalue变量。这也可能是函数调用或类似函数。
为了让代码等待窗口完成,你应该在options_popup对象上调用wait_window()方法,因为这是你正在等待的那个。您也可以将其移动到弹出窗口的 init 方法,然后在self上调用它。
有关对话窗口的更多信息,请查看此article。我认为这个对话支持类示例非常好。
希望它有所帮助!