【发布时间】:2009-09-10 15:56:42
【问题描述】:
您知道隐藏或以任何其他方式摆脱由Tk() 打开的根窗口的聪明方法吗?我只想使用普通对话框。
我应该跳过对话框并将所有组件放在根窗口中吗?这是可能的还是可取的?还是有更智能的解决方案?
【问题讨论】:
您知道隐藏或以任何其他方式摆脱由Tk() 打开的根窗口的聪明方法吗?我只想使用普通对话框。
我应该跳过对话框并将所有组件放在根窗口中吗?这是可能的还是可取的?还是有更智能的解决方案?
【问题讨论】:
可能绝大多数基于 tk 的应用程序都将所有组件放置在默认根窗口中。这是最方便的方法,因为它已经存在。选择隐藏默认窗口并创建自己的窗口是一件非常好的事情,尽管它只需要一点点额外的工作。
要回答有关如何隐藏它的具体问题,请使用根窗口的withdraw 方法:
import Tkinter as tk
root = tk.Tk()
root.withdraw()
如果您想让窗口再次可见,请调用deiconify(或 wm_deiconify)方法。
root.deiconify()
完成对话框后,您可以使用 destroy 方法销毁根窗口以及所有其他 tkinter 小部件:
root.destroy()
【讨论】:
.quit() 和.destroy() 实际上是相同的。
destroy(),您可以在任何小部件上使用它。当您在根窗口中调用它时,它只会表现得像.quit(),即使那样也存在差异。只是大多数应用永远不会利用这些差异。
我没有测试,因为我没有任何 Python/TKinter 环境,但试试这个。
在纯 Tk 中有一个名为“wm”的方法来管理窗口。在那里,您可以执行类似“wm withdraw .mywindow”之类的操作,其中 '.mywindow' 是顶层。
在 TkInter 中,您应该能够执行以下操作:
root = Tkinter.Tk()
root.withdraw() # won't need this
如果您想让窗口再次可见,请调用deiconify(或wm_deiconify)方法。
root.deiconify()
【讨论】:
root.deiconify() 让窗口重新出现。
在 OSX 上,iconify 似乎效果更好:
root = Tkinter.Tk()
root.iconify()
【讨论】:
如果您不希望在创建窗口时出现“闪烁”,请使用以下细微变化:
import Tkinter as tk
root = tk.Tk()
root.overrideredirect(1)
root.withdraw()
【讨论】:
我需要检查它是否是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 下,该窗口将显示在任务栏中。 当窗口被图标化后,状态方法返回
正常,图标化,撤回,图标
【讨论】:
这种方式可以正常工作:
import Tkinter as tk
root = tk.Tk()
root.withdraw()
或者这个:
root = tk.Tk()
root.overrideredirect(1)
root.withdraw()
两件事你不能忘记:
不要忘记导入类:
将 tkinter 导入为 tk
将上述命令放在主窗口中,任何功能之外
【讨论】:
tkinter 而不是 Tkinter。
对于 Python 3.0 及更高版本,要隐藏窗口,您需要编写以下代码:
import tkinter
tkinter.Tk().withdraw()
【讨论】:
root.deiconify()
root.withdraw()
【讨论】: