python,如何处理多个窗口之间的事件?

2024-09-29 00:16:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下示例代码生成两个窗口:

import Tkinter as tk

class Demo1:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master)
        self.button1 = tk.Button(self.frame, text = 'New Window', width = 25, command = self.new_window)
        self.button1.pack()
        self.frame.pack()
    def new_window(self):
        print 1
        self.newWindow = tk.Toplevel(self.master)
        print 2
        self.app = Demo2(self.newWindow)
        print 3

class Demo2:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master)
        self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_windows)
        self.quitButton.pack()
        self.frame.pack()
    def close_windows(self):
        self.master.destroy()

def main(): 
    root = tk.Tk()
    app = Demo1(root)
    root.mainloop()

if __name__ == '__main__':
    main()

我希望在调用new_window()方法时打印“1”(或者可能是“2”)。我希望在Demo2关闭时打印“3”! 但是通过按button1,我执行了所有三个print语句。 我怎么办?你知道吗


Tags: selfmasternewmaindefrootwindowframe
1条回答
网友
1楼 · 发布于 2024-09-29 00:16:20

您可以使用wait_window方法等待销毁第二个窗口,然后再继续执行第一个窗口中的下一个语句。你知道吗

我已经修改了你的代码使它工作。希望有帮助-

import Tkinter as tk

class Demo1(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.master = master
        self.frame = tk.Frame(self.master)
        self.button1 = tk.Button(self.frame, text = 'New Window', width = 25, command = self.new_window)
        self.button1.pack()
        self.frame.pack()
    def new_window(self):
        print 1
        # self.newWindow = tk.Toplevel(self.master)
        print 2
        self.app = Demo2(self).display_window()
        print 3

class Demo2:
    def __init__(self, master):
        self.master = tk.Toplevel(master)
        self.frame = tk.Frame(self.master)
        self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.master.destroy)
        self.quitButton.pack()
        self.frame.pack()

    def display_window(self):
        self.master.wait_window()
        return 0

def main(): 
    root = tk.Tk()
    app = Demo1(root)
    root.mainloop()

if __name__ == '__main__':
    main()

相关问题 更多 >