2012-04-22 153 views
10

如何在Tkinter中顯示和隱藏小部件?我想有一個輸入框,但不是一直顯示。有人能讓我看到在tkinter中顯示和隱藏輸入小部件和其他小部件的功能嗎?我希望能夠在沒有多個框架的情況下做到這一點。顯示和隱藏小部件

+3

我認爲,有你的問題的答案 - http://stackoverflow.com/questions/3819354/in-tkinter-is-there-any-way-to-make-a-widget-not-visable – 2012-04-22 11:29:40

回答

20

This has been answered before on stackoverflow。簡短的回答是,你可以使用grid_remove,如果它以前是通過網格添加的,這會導致該小部件被刪除。 grid_remove會記住小部件的位置,因此簡單的grid()會將其重新放回,而無需重新指定所有選項。

您還可以使用pack_forget(如果使用包)和grid_forget(如果使用網格)。這些工作與grid_remove類似,只是它們會導致所有設置被遺忘,這意味着您必須將其明確地放回到屏幕的適當位置。

另一種選擇是利用小部件的堆疊順序。您可以使用lower方法將小部件隱藏在其父項的後面,並使用lift將其上移。例如,參見this answer

0

我嘗試了其他人發佈的建議,並注意到我犯了一個簡單的錯誤。您不能在宣佈要隱藏的小部件的同一行上調用.grid()

爲了澄清,我以前有這樣的:

self.helpExpansion = ttk.Label(self.helpMenu, text="Expansion Widget").grid(row=1, column=3, sticky=EW) 
self.helpExpansion.grid_remove() 

但我得到了錯誤AttributeError: 'NoneType' object has no attribute 'grid_remove'。爲了解決這個問題,我不得不撥打電話到.grid()在新行,像這樣:

self.helpExpansion = ttk.Label(self.helpMenu, text="Help Expansion") 
self.helpExpansion.grid(row=1, column=3, sticky=EW) 
self.helpExpansion.grid_remove() 

然後在顯示和隱藏之間切換,我只是輪流調用self.helpExpansion.grid()(不需要函數參數)和self.helpExpansion.grid_remove()之間。

對我來說,它與tk.Labelttk.Label一起工作。我正在使用Python 2.7.13。希望有所幫助!

+0

原因在於,不是將label引用分配給self.helpExpansion,而是將調用的返回值分配給grid(),它返回None。將調用添加到對窗口構造函數的調用中是一種方便的簡寫形式,但前提是您稍後不需要對該窗口小部件的引用(例如固定標籤,或者當您通過特殊的tk變量或通過回調)。 – DrEsperanto 2018-03-09 23:22:24