Tkinter 위젯 숨기기, 복구 및 삭제 방법
이 튜토리얼에서는 버튼을 클릭하여 Tkinter 위젯을 숨기고 복구하는 방법을 보여줍니다. 결국 기존 Tkinter 위젯을 삭제하거나 종료하는 방법도 보여줍니다.
Tkinter 위젯 숨기기 및 복구
Tkinter 위젯을 숨기는 pack_forget()
메소드
Tkinter 위젯의 pack
method와 달리 pack_forget()
을 호출하여 Tkinter 위젯을 숨길 수 있습니다 위젯을 보이지 않게하는 방법.
try:
import Tkinter as tk
except:
import tkinter as tk
class Test:
def __init__(self):
self.root = tk.Tk()
self.label = tk.Label(self.root, text="Label")
self.buttonForget = tk.Button(
self.root,
text="Click to hide Label",
command=lambda: self.label.pack_forget(),
)
self.buttonRecover = tk.Button(
self.root, text="Click to show Label", command=lambda: self.label.pack()
)
self.buttonForget.pack()
self.buttonRecover.pack()
self.label.pack(side="bottom")
self.root.mainloop()
def quit(self):
self.root.destroy()
app = Test()
self.buttonForget = tk.Button(
self.root, text="Click to hide Label", command=lambda: self.label.pack_forget()
)
pack_forget()
은 buttonForget
버튼의 명령에 바인딩됩니다.
버튼을 클릭하면 레이블 위젯이 숨겨 지지만 레이블 자체는 여전히 존재하지만 보이지 않습니다.
pack()
메소드를 다시 호출하여 위젯을 보이게하거나 다시 말해 위젯을 패킹해야합니다.
grid
레이아웃이 사용 된 경우 Tkinter 위젯을 숨기는 방법
위젯이 grid
레이아웃 관리자로 배치 된 경우, grid_forget()
메소드를 사용하여 Tkinter 위젯을 보이지 않게해야합니다.
try:
import Tkinter as tk
except:
import tkinter as tk
class Test:
def __init__(self):
self.root = tk.Tk()
self.label = tk.Label(self.root, text="Label")
self.buttonForget = tk.Button(
self.root,
text="Click to hide Label",
command=lambda: self.label.grid_forget(),
)
self.buttonRecover = tk.Button(
self.root, text="Click to show Label", command=lambda: self.label.grid()
)
self.buttonForget.grid(column=0, row=0, padx=10, pady=10)
self.buttonRecover.grid(column=0, row=1, padx=10, pady=10)
self.label.grid(column=0, row=2, padx=10, pady=10)
self.root.mainloop()
def quit(self):
self.root.destroy()
app = Test()
self.buttonForget = tk.Button(
self.root, text="Click to hide Label", command=lambda: self.label.grid_forget()
)
여기서 우리는 grid_forget
메소드를 버튼의 명령에 바인딩합니다.
grid
메소드를 다시 호출 한 후 숨겨지기 전에 레이블의 위치가 동일하지 않음을 알 수 있습니다.
레이블을 원래 위치로 복원하려면 grid_remove
메소드가 올바른 옵션입니다.
grid
레이아웃이 사용되는 경우 Tkinter 위젯을 숨기는 방법
grid_remove()
는 위젯을 숨기지 만 column
및 row
와 같은 그리드 옵션을 기억합니다.
try:
import Tkinter as tk
except:
import tkinter as tk
class Test:
def __init__(self):
self.root = tk.Tk()
self.label = tk.Label(self.root, text="Label")
self.buttonForget = tk.Button(
self.root,
text="Click to hide Label",
command=lambda: self.label.grid_remove(),
)
self.buttonRecover = tk.Button(
self.root, text="Click to show Label", command=lambda: self.label.grid()
)
self.buttonForget.grid(column=0, row=0, padx=10, pady=10)
self.buttonRecover.grid(column=0, row=1, padx=10, pady=10)
self.label.grid(column=0, row=2, padx=10, pady=20)
self.root.mainloop()
def quit(self):
self.root.destroy()
app = Test()
버튼을 클릭하여 Tkinter 위젯을 영구적으로 삭제
이 섹션에서 destroy
메소드를 호출하여 Tkinter 위젯을 영구적으로 삭제하는 방법을 보여줍니다.
try:
import Tkinter as tk
except:
import tkinter as tk
class Test:
def __init__(self):
self.root = tk.Tk()
self.label = tk.Label(self.root, text="Label")
self.buttonForget = tk.Button(
self.root, text="Click to hide Label", command=lambda: self.label.destroy()
)
self.buttonRecover = tk.Button(
self.root, text="Click to show Label", command=lambda: self.label.pack()
)
self.buttonForget.pack()
self.buttonRecover.pack()
self.label.pack(side="bottom")
self.root.mainloop()
def quit(self):
self.root.destroy()
app = Test()
버튼을 클릭하면 버튼이 삭제됩니다.
buttonRecover
버튼을 클릭하려고하면 아래와 같이_tkinter.TclError
오류 알림이 표시됩니다.
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\WinPython\WPy-3661\python-3.6.6.amd64\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
File "C:\Users\jinku\OneDrive\Bureaublad\test.py", line 17, in <lambda>
command=lambda: self.label.pack())
File "D:\WinPython\WPy-3661\python-3.6.6.amd64\lib\tkinter\__init__.py", line 2140, in pack_configure
+ self._options(cnf, kw))
_tkinter.TclError: bad window path name ".!label"
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook