我有一个程序需要一个对话框来询问一个存储在global
变量中的输入字符串;目前,我使用Toplevel
窗口作为主Tk
窗口的子窗口来执行此操作。问题是global
变量已更改(这是有效的,我在回调方法中检查过),但在destroy
窗口调用Toplevel
后,该值仍未保留
from Tkinter import *
class GUI:
def __init__(self):
"""initialization"""
# widgets
self.window = Tk()
get_string = Button(
self.window,
command = self.on_get_string,
text = "Open string"
)
# pack the widgets
get_string.pack()
return
def main(self):
"""the main method"""
self.window.mainloop()
return
def on_get_string(self, event = None):
"""open the string window"""
prompt = PromptString() # a dialog which prompts for a string
print str(prompt.string) # None
prompt.main()
print str(prompt.string)
return
class PromptString:
def __init__(self):
"""initialization"""
self.string = None # the string
# widgets
self.window = Toplevel()
self.input = Entry(self.window)
self.input.bind("<Return>", self.on_set_string)
set_button = Button(
self.window,
command = self.on_set_string,
text = "Set"
)
# pack the widgets
self.input.pack(side = LEFT)
set_button.pack(side = RIGHT)
return
def main(self):
"""the main method"""
self.window.mainloop() # execution pauses after this line finishes
return
def get_input(self):
"""get the input"""
return self.input.get()
def on_set_string(self, event = None):
"""set the string variable and close the window"""
self.string = self.get_input()
self.window.destroy()
return
GUI().main()
我正在吃我,我无法解决这个问题,但我们将非常感谢任何帮助,并且我提前感谢你。
编辑:
我为这种混乱道歉,但这次我实际上重现了这个错误,尽管这不是一个错误,而是一个问题。问题是程序的执行在第39行的prompt.main()
调用中暂停。我尝试点击并输入2个后续值,这些值以相反的顺序打印后< / strong> Tk
实例已关闭。暂停执行是否是Tkinter的产品?我该如何解决这个问题?
编辑1:
有问题的变量不是全局变量,而是PromptString
类的属性。
答案 0 :(得分:0)
解决方案是使用Tk
的{{1}}方法。这允许wait_window(other_window)
的执行结构不会停止执行。固定代码如下:
Tkinter