首页 > 解决方案 > 如何创建彼此独立的窗口?

问题描述

我想创建独立的窗口。每个创建窗口,当调用者窗口关闭或销毁时。到目前为止,创建窗口没有问题。但控制台警告消息,我不知道这是什么。

控制台警告

无法调用“事件”命令:应用程序在执行从“ttk::ThemeChanged”中调用的“事件生成 $w <>”(过程“ttk::ThemeChanged”第 6 行)时被破坏

import tkinter

class MainWindow(tkinter.Tk):
    def __init__(self, condition):
        super().__init__()

        self.title("Main Window ")
        self.geometry("640x360")

        if (condition == 1):
            DashboardWindow() 
            self.destroy()
            

class DashboardWindow(tkinter.Tk):
    def __init__(self):
        super().__init__()

        self.title("Dashboard Window")
        self.geometry("940x560")

    
    
MainWindow(1).mainloop()

标签: pythontkinter

解决方案


由于我在您的问题下发布的评论Tk中的链接中所述的原因,通常最好避免在您的应用程序中包含多个实例。

因此,下面的代码显示了一种基于您的问题的方法。其中,DashboardWindow该类派生自 tkinter 的Toplevel小部件。请注意,MainWindow实例只是隐藏的,因此不会被破坏,这意味着它可以再次可见(root.state('normal')如果需要,可以通过调用)。为了证明我ButtonDashboardWindow课堂上添加了一个。

import tkinter as tk


class MainWindow(tk.Tk):
    def __init__(self, condition):
        super().__init__()

        self.title("Main Window ")
        self.geometry("640x360")

        if condition == 1:
            new = DashboardWindow(self)
            self.wait_visibility(new)  # Wait until it's visible.
            self.withdraw()  # Hide MainWindow


class DashboardWindow(tk.Toplevel):
    def __init__(self, parent):
        super().__init__(parent)

        self.title("Dashboard Window")
        self.geometry("940x560")

        tk.Button(self, text='Main window', command=lambda: parent.state('normal')).pack()


if __name__ == '__main__':

    root = MainWindow(1)
    root.mainloop()


推荐阅读