如何摆脱Python Tkinter根窗口?

时间:2009-09-10 15:56:42

标签: python winapi tkinter tk

你知道一种聪明的方式来隐藏或以任何其他方式摆脱Tk()打开的根窗口吗?我想使用普通对话框。

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

8 个答案:

答案 0 :(得分:70)

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

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

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

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

root.deiconify()

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

root.destroy()

答案 1 :(得分:12)

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

在纯Tk中,有一种叫做“wm”的方法来管理窗口。在那里你可以做一些像“wm withdraw .mywindow”这样的地方,其中'.mywindow'是一个顶级的。

在TkInter中你应该可以做类似的事情:

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

如果要再次显示窗口,请调用deiconify(或wm_deiconify)方法。

root.deiconify()

答案 2 :(得分:6)

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

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

答案 3 :(得分:1)

这种方式可以正常工作:

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

或者这个:

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

你不能忘记的两件事:

  1. 不要忘记导入类:

    将 tkinter 导入为 tk

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

答案 4 :(得分:0)

如果您不希望在创建窗口时出现“闪烁”,请使用此略微变化:

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

答案 5 :(得分:0)

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

import tkinter
tkinter.Tk().withdraw()

答案 6 :(得分:0)

我需要检查是否为withdrawn,下面是解决方法。

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

withdraw

从屏幕上删除窗口(不破坏它)。要重绘窗口,请使用deiconify。 退出窗口后,状态方法将返回“ withdrawn”

deiconify

重画窗口

iconify

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

state

正常,图标化,撤回,图标

答案 7 :(得分:-1)

root.deiconify()
root.withdraw()