So etwas würde das Widget normal erscheinen lassen:
Label(self, text = 'hello', visible ='yes')
So etwas würde das Widget überhaupt nicht erscheinen lassen:
Label(self, text = 'hello', visible ='no')
Möglicherweise interessieren Sie die Methoden pack_forget
und grid_forget
eines Widgets. Im folgenden Beispiel verschwindet die Schaltfläche, wenn Sie darauf klicken
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()
Wie in einer anderen Antwort erläutert, können Sie pack_forget
oder grid_forget
verwenden. Eine andere Option ist die Verwendung von lift
und lower
. Dies ändert die Stapelreihenfolge der Widgets. Der Nettoeffekt ist, dass Sie Widgets hinter Geschwister-Widgets (oder Nachkommen von Geschwistern) ausblenden können. Wenn Sie möchten, dass sie sichtbar sind, lift
, und wenn Sie möchten, dass sie unsichtbar sind, lower
.
Der Vorteil (oder Nachteil ...) besteht darin, dass sie in ihrem Master noch Platz beanspruchen. Wenn Sie ein Widget "vergessen", passen die anderen Widgets möglicherweise ihre Größe oder Ausrichtung neu an.
Hier ist ein einfaches Beispiel:
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 __== "__main__":
app = SampleApp()
app.mainloop()
Ich weiß, dass dies ein paar Jahre zu spät ist, aber dies ist jetzt die dritte Google-Antwort für "Tkinter hide Label" vom 27.10.13 ... Also, wenn jemand wie ich vor ein paar Wochen eine einfache GUI baut und einfach möchte, dass ein Text angezeigt wird, ohne ihn durch "lower" oder "lift" -Methoden gegen ein anderes Widget auszutauschen, ich möchte eine von mir verwendete Problemumgehung anbieten (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 __== '__main__':
root=Tk()
ds = Top(root)
root.mainloop()
Die Idee dabei ist, dass Sie die Farbe des DISABLED-Texts mit ".cget (" bg ")" http://effbot.org/tkinterbook/widget.htm auf den Hintergrund ('bg') des übergeordneten Elements setzen können macht es "unsichtbar". Der Button Callback setzt die Beschriftung auf die Standard-Vordergrundfarbe zurück und der Text ist wieder sichtbar.
Ein Nachteil ist, dass Sie immer noch den Platz für den Text zuweisen müssen, auch wenn Sie ihn nicht lesen können, und zumindest auf meinem Computer fügt sich der Text nicht perfekt in den Hintergrund ein. Bei einigen Optimierungen könnte die Farbe etwas besser sein, und bei kompakten GUIs sollte die Zuordnung von Leerzeichen nicht zu viel Aufwand für ein kurzes Aufklappen sein.
Siehe Standardfensterfarbe Tkinter und Hex-Farbcodes für Informationen darüber, wie ich etwas über das Farbzeug herausgefunden habe.
Zum Ausblenden eines Widgets können Sie die Funktion pack_forget () verwenden. Zum erneuten Anzeigen können Sie die Funktion pack () verwenden und beide Funktionen in separaten Funktionen implementieren.
from Tkinter import *
root = Tk()
label=Label(root,text="I was Hidden")
def labelactive():
label.pack()
def labeldeactive():
label.pack_forget()
Button(root,text="Show",command=labelactive).pack()
Button(root,text="Hide",command=labeldeactive).pack()
root.mainloop()
Für jemanden, der OOP wie mich hasst (Dies basiert auf der Antwort von Bryan Oakley)
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()