78

您知道隐藏或以任何其他方式摆脱出现的根窗口的聪明方法Tk()吗?我只想使用普通对话框。

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

4

8 回答 8

115

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

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

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

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

root.deiconify()

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

root.destroy()
于 2009-09-10T21:02:32.060 回答
13

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

在纯 Tk 中有一种称为“wm”的方法来管理窗口。在那里您可以执行类似“wm 撤回 .mywindow”的操作,其中 '.mywindow' 是顶层。

在 TkInter 你应该能够做类似的事情:

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

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

root.deiconify()
于 2009-09-10T20:54:41.723 回答
9

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

root = Tkinter.Tk()
root.iconify()
于 2014-11-14T14:50:19.643 回答
4

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

import Tkinter as tk
root = tk.Tk()
root.overrideredirect(1)
root.withdraw()
于 2017-04-13T01:18:14.347 回答
2

I need to check whether it's withdrawn or not, below is the solution.

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

withdraw

Removes the window from the screen (without destroying it). To redraw the window, use deiconify. When the window has been withdrawn, the state method returns "withdrawn".

deiconify

redraw the window

iconify

Turns the window into an icon (without destroying it). To redraw the window, use deiconify. Under Windows, the window will show up in the taskbar. When the window has been iconified, the state method returns

state

normal, iconify, withdrawn, icon

于 2020-10-05T07:13:35.377 回答
1

这种方式可以正常工作:

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

或者这个:

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

你不能忘记两件事:

  1. 不要忘记导入类:

    将 tkinter 导入为 tk

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

于 2021-04-21T15:25:03.260 回答
-1
root.deiconify()
root.withdraw()
于 2021-01-25T06:00:37.710 回答
-1

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

import tkinter
tkinter.Tk().withdraw()
于 2019-09-04T09:00:34.390 回答