Что-то вроде этого, чтобы виджет выглядел нормально:
Label(self, text = 'hello', visible ='yes')
Пока что-то вроде этого, виджет не появится вообще:
Label(self, text = 'hello', visible ='no')
Что-то вроде этого, чтобы виджет выглядел нормально:
Label(self, text = 'hello', visible ='yes')
Пока что-то вроде этого, виджет не появится вообще:
Label(self, text = 'hello', visible ='no')
Вас может заинтересовать pack_forget
и grid_forget
методов виджета. В следующем примере кнопка исчезает при нажатии
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()
Один из вариантов, как объясняется в другом ответе, заключается в использовании pack_forget
или grid_forget
. Другой вариант - использовать lift
и lower
. Это изменяет порядок укладки виджетов. Чистый эффект заключается в том, что вы можете скрывать виджеты за видными видениями сестры (или потомками братьев и сестер). Когда вы хотите, чтобы они были видны вами, lift
их, и когда вы хотите, чтобы они были невидимыми, вы lower
их.
Преимущество (или недостаток...) состоит в том, что они все еще занимают место у своего хозяина. Если вы "забудете" виджет, другие виджеты могут перенастроить их размер или ориентацию, но если вы их поднимете или опустите, они не будут.
Вот простой пример:
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" от 10/27/13... Итак, если кто-то вроде меня несколько недель назад строит простой 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()
Идея здесь заключается в том, что вы можете установить цвет текста DISABLED в фоновом режиме ('bg') родителя, используя ".cget('bg')" http://effbot.org/tkinterbook/widget.htm, что делает его "невидимым". Обратный вызов кнопки сбрасывает метку на цвет переднего плана по умолчанию, и текст снова отображается.
Недостатки здесь в том, что вам все равно нужно выделить пространство для текста, даже если вы не можете его прочитать, и, по крайней мере, на моем компьютере текст не идеально сочетается с фоном. Возможно, с некоторой настройкой цвет может быть лучше, и для компактных графических интерфейсов пустое пространство не должно быть слишком сложным для короткой рекламы.
Смотрите Цвет окна по умолчанию Tkinter и шестнадцатеричные цветовые коды для получения информации о том, как я узнал о материалах цвета.
Для тех, кто ненавидит ООП, как я (это основано на ответе Брайана Оукли)
import tkinter as tk
def show_label():
label1.lift()
def hide_label():
label1.lower()
root = tk.Tk()
frame1 = tk.Frame(root)
frame1.pack()
label1 = tk.Label(root, text="Hello, world")
label1.pack(in_=frame1)
button1 = tk.Button(root, text="Click to hide label",command=hide_label)
button2 = tk.Button(root, text="Click to show label", command=show_label)
button1.pack(in_=frame1)
button2.pack(in_=frame1)
root.mainloop()