如何摆脱 Python Tkinter 根窗口?

问题描述 投票:0回答:8

您知道隐藏或以其他方式删除由

Tk()
打开的根窗口的明智方法吗?我只想使用普通对话框。

我应该跳过该对话框并将所有组件放在根窗口中吗?这是可能的还是可取的?或者有更聪明的解决方案吗?

python winapi tkinter tk-toolkit
8个回答
129
投票

可能绝大多数基于 tk 的应用程序都将所有组件放置在默认根窗口中。这是最方便的方法,因为它已经存在。选择隐藏默认窗口并创建自己的窗口是一件非常好的事情,尽管它只需要一点额外的工作。

要回答有关如何隐藏它的具体问题,请使用根窗口的 withdraw 方法:

import Tkinter as tk
root = tk.Tk()
root.withdraw()

如果您想让窗口再次可见,请调用 deiconify(或 wm_deiconify)方法。

root.deiconify()

完成对话框后,您可以使用 destroy 方法销毁根窗口以及所有其他 tkinter 小部件:

root.destroy()

15
投票

我没有测试过,因为我没有任何Python/TKinter环境,但是试试这个。

在纯 Tk 中,有一个名为“wm”的方法来管理窗口。在那里你可以做一些类似“wmwithdraw.mywindow”的事情,其中“.mywindow”是顶层。

在 TkInter 中,您应该能够执行类似以下操作:

root = Tkinter.Tk()
root.withdraw() # won't need this

如果您想让窗口再次可见,请调用 deiconify (或 wm_deiconify)方法。

root.deiconify()

11
投票

在 OSX 上,iconify 似乎效果更好:

root = Tkinter.Tk()
root.iconify()

7
投票

如果您不希望创建窗口时出现“闪烁”,请使用以下细微的变化:

import Tkinter as tk
root = tk.Tk()
root.overrideredirect(1)
root.withdraw()

3
投票

我需要检查是否

withdrawn
,下面是解决方案。

import tkinter as tk
root = tk.Tk()
root.withdraw()
print(root.wm_state())
if root.wm_state() == 'withdrawn':  # <----
    root.iconify()
root.mainloop()

撤回

从屏幕上移除窗口(不破坏它)。要重绘窗口,请使用 deiconify。 当窗口被撤回时,状态方法返回“withdrawn”

去图标化

重绘窗口

图标化

将窗口变成图标(不破坏它)。 要重绘窗口,请使用 deiconify。在 Windows 下,该窗口将显示在任务栏中。 当窗口被图标化时,状态方法返回

状态

正常、图标化、孤僻、图标


0
投票

这种方式效果很好:

import Tkinter as tk 
root = tk.Tk() 
root.withdraw()

或者这个:

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

有两件事你不能忘记:

  1. 不要忘记导入类:

    将 tkinter 导入为 tk

  2. 将上述命令放在主窗口中,任何功能之外


-2
投票

对于 Python 3.0 及更高版本,要隐藏窗口,您需要编写以下内容:

import tkinter
tkinter.Tk().withdraw()

-2
投票
root.deiconify()
root.withdraw()
© www.soinside.com 2019 - 2024. All rights reserved.