python - 如何创建彼此独立的窗口?
问题描述
我想创建独立的窗口。每个创建窗口,当调用者窗口关闭或销毁时。到目前为止,创建窗口没有问题。但控制台警告消息,我不知道这是什么。
控制台警告
无法调用“事件”命令:应用程序在执行从“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()
解决方案
由于我在您的问题下发布的评论Tk
中的链接中所述的原因,通常最好避免在您的应用程序中包含多个实例。
因此,下面的代码显示了一种基于您的问题的方法。其中,DashboardWindow
该类派生自 tkinter 的Toplevel
小部件。请注意,MainWindow
实例只是隐藏的,因此不会被破坏,这意味着它可以再次可见(root.state('normal')
如果需要,可以通过调用)。为了证明我Button
在DashboardWindow
课堂上添加了一个。
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()
推荐阅读
- java - 从 JAVA 项目文件夹将 CSV 导入 MYSQL
- python - Python 性能:While 与 For 循环
- pine-script - Pinescript:是否可以根据颜色创建条件?
- python - 如何使用 PyWin32 模块删除 Excel 中的总计和小计?
- amazon-web-services - Amazon cli 映像不适用于 Gitlab CI
- php - 如何使用 Doctrine 在几列上执行 WHERE 子句?
- mysql - 您想告诉我为什么即使我将 bundler 更新为“2.2.21”,Gemfile.lock 中 bundler 的版本仍然是“2.2.16”吗?
- json - Oracle REST 服务:获取内容类型为“application/json”的 REST API 错误消息
- python - 如何使用flask和python3从本地文件中读取一些图像然后显示在网页上?
- php - PHP MYSQL 选择 OneToMany 作为嵌套 json