tkinter tk / toplevel执行暂停回调的执行?

时间:2017-06-23 01:01:34

标签: python user-interface tkinter toplevel

我有一个程序需要一个对话框来询问一个存储在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类的属性。

1 个答案:

答案 0 :(得分:0)

解决方案是使用Tk的{​​{1}}方法。这允许wait_window(other_window)的执行结构不会停止执行。固定代码如下:

Tkinter