このようなものは、ウィジェットを正常に表示します:
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()
別の回答で説明したように、1つのオプションは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()
私はこれが数年遅れていることを知っていますが、これは10/27/13の時点での「Tkinter hide Label」に対する3番目のGoogleの回答です... 「lower」または「lift」メソッドを介して別のウィジェットにテキストをスワップアウトせずに表示したい場合、使用する回避策を提供したいと思います(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 「不可視」にレンダリングします。ボタンコールバックは、ラベルをデフォルトの前景色にリセットし、テキストが再び表示されます。
ここでの欠点は、たとえテキストを読むことができなくても、まだテキスト用のスペースを割り当てる必要があることです。少なくとも私のコンピューターでは、テキストは背景に完全には溶けません。色を微調整する方が良いかもしれませんし、コンパクトなGUIの場合、空白スペースの割り当ては、短い宣伝文としてはそれほど面倒ではないはずです。
色に関する情報を見つけた方法については、 デフォルトのウィンドウカラーTkinterおよび16進カラーコード を参照してください。
ウィジェットを非表示にするには、関数pack_forget()を使用し、再び表示するには、pack()関数を使用して、両方を別々の関数に実装します。
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()
OOP私のように嫌いな人のために(これはブライアンオークリーの答えに基づいています)
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()