【问题标题】:Why is Toplevel showing 2 windows?为什么 Toplevel 显示 2 个窗口?
【发布时间】:2018-01-16 20:19:26
【问题描述】:

我正在尝试制作一个 tkinter 应用程序,当第一个窗口(根)关闭时,它不会关闭所有内容(其他窗口)。我尝试使用Toplevel(),它非常适用于其他程序中的弹出窗口,但不适用于制作基础级别。

from tkinter import *

top = Toplevel(bg='red')

top.mainloop()

我不知道这是否可行,或者我不知道我是否可以更改Tk() 的属性以使其不会关闭所有其他窗口。

【问题讨论】:

  • 您不使用 Toplevel 作为仅根 Tk。 Toplevel 不是根,但始终是根窗口 (Tk) 的“对话框”。
  • 创建主窗口使用Tk()Toplevel() 用于创建第二个窗口(子窗口/对话框/消息框/等)
  • 你必须有一个根窗口。如果你不创建一个,tkinter 会为你创建一个。

标签: python tkinter toplevel


【解决方案1】:

显示了两个窗口,因为当创建 tkinter 小部件时,它会强制创建 Tk 实例,并且每个小部件,除非显式传递父级,否则是自动创建的 @987654322 的子级@ 实例。所以你的代码基本上模仿了以下代码:

from tkinter import *

root = Tk()

top = Toplevel(root, bg='red')

root.mainloop()

现在有一些方法可以解决您想要的行为,一种是隐藏实际的 Tk 实例:

import tkinter as tk

root = tk.Tk()
root.withdraw()

top = tk.Toplevel(root, bg='red')

#to display root window again
#root.iconify()
#root.deiconify()
root.mainloop()

另一种方法是否决删除 root 本身,但我怀疑这实际上是您想要的:

import tkinter as tk


def callback():
    print("Won't close")

root = tk.Tk()

root.protocol("WM_DELETE_WINDOW", callback)

root.mainloop()

【讨论】:

  • 撤销root可以按我的意愿工作,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多