2009-09-10 73 views
34

你知道一个聪明的方式来隐藏或以任何其他方式摆脱出现的根窗口,由Tk()打开?我只想使用普通的对话框。如何摆脱Python Tkinter根窗口?

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

+4

图片链接无效。 – 2009-09-10 17:08:42

回答

47

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

要获得关于如何隐藏它的具体问题,使用根窗口的withdraw方法:

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

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

root.deiconify() 

一旦你与对话完成后,你可以用destroy方法的所有其他Tkinter的部件一起销毁根窗口:

root.destroy() 
+0

使用主窗口的窍门。谢谢! – 2009-09-11 14:57:31

+0

因此,在StackOverflow中有使用.destroy(),tkinter.Toplevel(self).destroy(),quit(),tkinter.Toplevel(self).quit(),withdraw(),iconify()可供选择的解决方案。尼斯。除了没有一个工作...我做了“top_lev = tkinter.Toplevel(label); label.master.destroy(); label.destroy(); top_lev.destroy(); root = tkinter.Tk(); root.withdraw(); root.destroy()“,它像一个魅力(涉及一些讽刺)。 – 2017-03-21 08:03:47

+0

@deusexmachina:如果你使用它们,它们都会工作,但它们都有不同的目的。虽然'.quit()'和'.destroy()'实际上是相同的。 – 2017-03-21 11:16:41

10

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

在纯Tk中有一种名为“wm”的方法来管理窗口。在那里你可以做一些类似“wm withdraw .mywindow”的地方,其中“.mywindow”是一个顶层。如果您想再次使窗口可见,调用deiconify(或wm_deiconify)方法

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

在Tkinter的,你应该能够做类似的东西。

root.deiconify() 
+0

你怎么把窗户放在顶部? – IcyFlame 2013-04-12 09:18:42

+1

@IcyFlame:你做'root.deiconify()'让窗口重新出现。 – 2013-04-30 19:56:46

+0

谢谢你,先生,我已经问过这个问题,并得到一个答案: http://stackoverflow.com/questions/15967690/showing-a-window-that-was-hidden-using-root-withdraw-in- tkinter – IcyFlame 2013-05-01 09:06:57

4

在OSX,图标化似乎更好的工作:

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

如果您不想在创建窗口时出现“闪光灯”,请使用以下轻微变化:

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