在Tkinter有什么办法让一个小部件不可见?

像这样的东西,会使小部件正常显示:

Label(self, text = 'hello', visible ='yes') 

虽然这样的事情,会使小部件完全不出现:

 Label(self, text = 'hello', visible ='no') 

您可能会对小部件的pack_forgetgrid_forget方法感兴趣。 在下面的例子中,button消失时单击

 from Tkinter import * def hide_me(event): event.widget.pack_forget() root = Tk() btn=Button(root, text="Click") btn.bind('<Button-1>', hide_me) btn.pack() btn2=Button(root, text="Click too") btn2.bind('<Button-1>', hide_me) btn2.pack() root.mainloop() 

正如另一个答案所解释的,一种select是使用pack_forget或者grid_forget 。 另一个select是使用lift 。 这改变了小部件的堆叠顺序。 最终效果是,你可以隐藏在同胞小部件(或兄弟姐妹的后代)后面的小部件。 当你想让它们变得可见的时候, lift它们lift来,当你想让它们看不见的时候,就放下它们。

好处(或者劣势……)是他们仍然占用主人的空间。 如果你“忘记”一个小部件,其他小部件可能会重新调整它们的大小或方向,但如果你提高或降低它们,它们将不会。

这是一个简单的例子:

 import Tkinter as tk class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.frame = tk.Frame(self) self.frame.pack(side="top", fill="both", expand=True) self.label = tk.Label(self, text="Hello, world") button1 = tk.Button(self, text="Click to hide label", command=self.hide_label) button2 = tk.Button(self, text="Click to show label", command=self.show_label) self.label.pack(in_=self.frame) button1.pack(in_=self.frame) button2.pack(in_=self.frame) def show_label(self, event=None): self.label.lift(self.frame) def hide_label(self, event=None): self.label.lower(self.frame) if __name__ == "__main__": app = SampleApp() app.mainloop() 

我知道这是晚了几年,但这是Google第三次对“Tkinter hide label”的回应,截至2013年10月27日…所以如果像我这样的人几个星期前正在build立一个简单的GUI,只是想要一些文本出现,而不是通过“低级”或“提升”方法交换出另一个小部件,我想提供一个我使用的解决方法(Python2.7,Windows):

 from Tkinter import * class Top(Toplevel): def __init__(self, parent, title = "How to Cheat and Hide Text"): Toplevel.__init__(self,parent) parent.geometry("250x250+100+150") if title: self.title(title) parent.withdraw() self.parent = parent self.result = None dialog = Frame(self) self.initial_focus = self.dialog(dialog) dialog.pack() def dialog(self,parent): self.parent = parent self.L1 = Label(parent,text = "Hello, World!",state = DISABLED, disabledforeground = parent.cget('bg')) self.L1.pack() self.B1 = Button(parent, text = "Are You Alive???", command = self.hello) self.B1.pack() def hello(self): self.L1['state']="normal" if __name__ == '__main__': root=Tk() ds = Top(root) root.mainloop() 

这里的想法是,您可以使用“.cget('bg')”来设置禁用文本的颜色到父级的背景('bg') http://effbot.org/tkinterbook/widget.htm “无形”。 buttoncallback将标签重置为默认的前景色,文本再次可见。

这里的缺点是,即使你不能阅读文本,你仍然必须为文本分配空间,至less在我的计算机上,文本不能完美地融合到背景中。 也许有一些调整颜色的东西可能会更好,而对于紧凑的graphics用户界面,空白区的分配不应该是一个简短的blurb的麻烦太多。

请参阅默认窗口颜色Tkinter和hex颜色代码的信息关于我如何发现有关颜色的东西。