[ Python ] tkinter 버튼 이벤트 처리 프로그램
버튼을 클릭할 때마다 파이썬 쉘에 "안녕하세요?" 텍스트가 출력되는 프로그램을 작성해보자.
from tkinter import*
def process():
print("안녕하세요?")
window = Tk()
button = Button(window, text = "클릭하세요!", command = process)
button.pack()
window.mainloop()
▶ from tkinter import* : 'tkinter' 모듈에 있는 모든 함수를 사용할 수 있도록 가져옴
▶ window = Tk() : Tk()는 가장 기본이 되는 윈도우를 반환하기 때문에 이를 통해 윈도우 객체를 생성하면 화면에 윈도우가 생성됨
▶ button = Button(window, text = "클릭하세요!", command = process) : 버튼을 생성할 때 매개변수 command를 추가함
→ command의 값은 사용자가 작성한 함수의 이름
→ 버튼이 클릭되면 매개변수 command의 값인 process라는 함수가 호출됨
▶ button.pack() : 위젯을 최대한 압축해 윈도우에 표시하라는 의미
→ 버튼을 생성하더라도 pack() 함수를 호출하지 않으면 화면에 버튼이 나타나지 않음
이전 게시물을 참고해 화씨 -> 섭씨 버튼을 클릭해 섭씨의 Entry에 '100'이 보여지는 이벤트 처리 프로그램을 작성해보자.
(이전 게시물) 화씨 / 섭씨 프로그램
from tkinter import*
def process():
e2.insert(0, '100')
window = Tk()
l1 = Label(window, text = '화씨')
l2 = Label(window, text = '섭씨')
l1.grid(row = 0, column = 0)
l2.grid(row = 1, column = 0)
e1 = Entry(window)
e2 = Entry(window)
e1.grid(row = 0, column = 1)
e2.grid(row = 1, column = 1)
b1 = Button(window, text = '화씨 -> 섭씨', command = process)
b2 = Button(window, text = '섭씨 -> 화씨')
b1.grid(row = 2, column = 0)
b2.grid(row = 2, column = 1)
window.mainloop()
▶ def process() : b1 버튼이 클릭되었을 때 수행해야 할 작업을 정의한 함수
▶ 윈도우에 텍스트를 표시하려면 tkinter의 레이블(Label) 위젯이 필요함
l1 = Label(window, text = '화씨')
l2 = Label(window, text = '섭씨')
▶ Entry 위젯을 각각 입력된 값의 행과 열 위치에 배치함
l1.grid(row = 0, column = 0)
l2.grid(row = 1, column = 0)
▶ e2.insert(0, '100') : e2 entry 위젯이 0번째 위치에 '100'이 출력되게 함
▶ 윈도우에서 사용자로부터 텍스트를 입력받기 위해 tkinter의 Entry 위젯이 필요함
→ Entry 위젯이 window에 올라가야 하므로 매개변수를 window로 설정
e1 = Entry(window)
e2 = Entry(window)
▶ b1 = Button(window, text = '화씨->섭씨', command=process) : '화씨->섭씨' 버튼은 b1에 해당하고, 이를 클릭하면 process()가 호출되도록 command값을 설정해 버튼과 함수를 연결함
화씨 -> 섭씨 버튼을 클릭하면 화씨 Entry에 입력된 온도가 섭씨온도로 계산되어 출력되는 프로그램을 작성해보자.
from tkinter import *
def process():
temperature = float(e1.get())
mytemp = (temperature-32)*5/9
e2.insert(0, str(mytemp))
window = Tk()
l1 = Label(window, text = '화씨')
l2 = Label(window, text = '섭씨')
l1.grid(row = 0, column = 0)
l2.grid(row = 1, column = 0)
e1 = Entry(window)
e2 = Entry(window)
e1.grid(row = 0, column = 1)
e2.grid(row = 1, column = 1)
b1 = Button(window, text = '화씨->섭씨', command = process)
b2 = Button(window, text = '섭씨->화씨')
b1.grid(row = 2, column = 0)
b2.grid(row = 2, column = 1)
window.mainloop()
▶ temperature = float(e1.get()) : 화씨 entry인 e1에서 입력된 값을 가져오기 위해 get() 사용
→ Entry에 입력된 값은 temperature 변수에 저장됨
▶ mytemp = (temperature-32)*5/9 : 화씨온도를 섭씨온도로 변환해 mytemp 변수에 저장함
▶ e2.insert(0, str(mytemp)) : mytemp 값을 e2 Entry에 삽입되도록 함