본문 바로가기

TOOL FOR ART/Python GUI

2. Tkinter _ 버튼 만들기

* Tkinter 목차 보기

 

파이썬 GUI 프로그래밍 _ Tkinter 배워보기

GUI 프로그래밍은 단순한 명령체계 프로그램이 아닌 윈도우에서 실행하여 사용자가 시각적으로 프로그램을 동작하고 명령을 내릴 수 있게 창을 만들어주는 것입니다. 그래서 그래픽 사용자 인

stlyw.tistory.com

지난 시간에 배운 내용에서부터 시작해봅시다.

 

import tkinter as tk

class Window(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("HOOKSMITH")
        self.label = tk.Label(self, text="ARE YOU SURE?")
        self.label.pack(fill=tk.BOTH, expand=1, padx=80, pady=20)

 

요기까지가 딱 저번에 배웠던 내용입니다.

 

1.  버튼 정의하기

먼저 버튼을 정의해야 합니다. yes와 no 버튼을 다음과 같이 정의하도록 하죠.

 

def yes_button(self):
    self.label.configure(text="YES")
    self.after(0, self.destroy)
def no_button(self):
    self.label.configure(text="NO")
    self.after(0, self.destroy)

 

위치는 상관없습니다. 저 텍스트의 이름이 바로 버튼에 표시될 텍스트를 의미하고요,

 

특별히 중요시 봐야할 곳은 self.after 명령어입니다.

첫 번째 변수가 시간이고, self.destory 버튼 눌렀을 시 취하는 행동입니다. 

일단 여기서는 바로 종료하는 기능을 가진 버튼을 생성해보도록하겠씁니다.

 

* 버튼 정의는 어디에 위치하든지 상관없습니다. 

2. 버튼 이름 정하기

버튼 이름 먼저 정합니다. 저는 다음과 같이 정했습니다. 

 

yes_button = tk.Button(self, text="YES", command=self.yes_button)

 

등호 앞에부분이 버튼 이름이고요, 첫 번째 변수 self 창으로, 텍스트는 YES, 명령은 정의했던 Yes_button을 쓰겠다는 의미입니다. 

3. 버튼 위치 정하기

yes_button 바로앞 줄에 다음과 같이 입력해주세요

 

yes_button.pack(side=tk.LEFT, padx=(40, 0), pady=(0, 40))

 

역시 기하 관리자 팩으로 버튼 위치를 정하네요. 사이드는 왼쪽부터라는 의미로, 행과 열 위치를 정해줍니다.

 

No 버튼 역시 같은 방식으로 정의합니다.

 

4. 창 루프 활성화 하고 실행

창 루프 명령어를 다음과 같이 넣어줍니다.

 

if __name__ == "__main__":
    window = Window()
    window.mainloop()

 

항상 띄워쓰기 주의하시고, 실행하면 다음과 같이 yes, no 버튼 완성!!!

 

예시 코드 실행결과

버튼 눌러주면 자동으로 창 종료합니다.

 

전체적인 예시코드는 다음과 같습니다.

 

import tkinter as tk

class Window(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("HOOKSMITH")
        self.label = tk.Label(self, text="ARE YOU SURE?")
        self.label.pack(fill=tk.BOTH, expand=1, padx=80, pady=20)
        yes_button = tk.Button(self, text="YES", command=self.yes_button)
        yes_button.pack(side=tk.LEFT, padx=(40, 0), pady=(0, 40))
        no_button= tk.Button(self, text="NO", command=self.no_button)
        no_button.pack(side=tk.RIGHT, padx=(0, 40), pady=(0, 40))
    def yes_button(self):
        self.label.configure(text="YES")
        self.after(0, self.destroy)
    def no_button(self):
        self.label.configure(text="NO")
        self.after(0, self.destroy)

if __name__ == "__main__":
    window = Window()
    window.mainloop()