2009-09-10 72 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()