Tkinter 위젯 숨기기, 복구 및 삭제 방법

  1. Tkinter 위젯 숨기기 및 복구
  2. 버튼을 클릭하여 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()

Tkinter 는 버튼을 클릭하여 위젯 숨기기 및 복구

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()

Tkinter 는 버튼을 클릭하여 grid_forget 메소드로 위젯 숨기기 및 복구

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()는 위젯을 숨기지 만 columnrow 와 같은 그리드 옵션을 기억합니다.

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 는 버튼을 클릭하여 grid_remove 메소드로 위젯 숨기기 및 복구

버튼을 클릭하여 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()

버튼을 클릭하여 destroy 메소드를 사용하여 Tkinter 삭제 위젯

버튼을 클릭하면 버튼이 삭제됩니다.

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"

관련 문장 - Tkinter Label

  • Tkinter 레이블 텍스트를 얻는 방법
  • Tkinter Label 위젯의 테두리를 설정하는 방법
  • 관련 문장 - Tkinter

  • Tkinter 레이블 글꼴 크기를 변경하는 방법
  • Tkinter 레이블 텍스트를 변경하는 방법