tkinter - 이벤트 설정하기
본문 바로가기
파이썬(Python)/파이썬 GUI(PyQt5 & tkinter)

tkinter - 이벤트 설정하기

by Squat Lee 2021. 10. 10.

 

지난번 포스트는 Window(창)를 만들고, Label, Button, Entry를 만들어서 배치를 해 보았습니다. 지난 포스튼 아래 링크를 참고하시기 바랍니다.

 

tkinter - 그리드를 이용해서 레이블, 엔트리, 버튼 배치하기

 

이번 포스트는 이벤트를 설정하는 방법에 대해서 적어 보도록 하겠습니다.

 

win = Tk()

 

win.mainloop()

 

우선 창을 만들어 보겠습니다.

 

여기에 레이블과 버튼을 넣어 보도록 하겠습니다.

str = ['더하기''빼기']

 

win = Tk()

 

count = StringVar(value = '0')

 

lbl_data = Label(win, width=20, textvariable = count)

lbl_data.grid(row=0, column=0, columnspan=2)

 

btn_add = Button(win, text=str[0])

btn_add.grid(row=1, column=0)

btn_sub = Button(win, text=str[1])

btn_sub.grid(row=1, column=1)

 

win.mainloop()

 

조금 코드가 복잡한 것 같은데, 더하기 버튼을 누르면 1씩 더해지고, 빼기 버튼을 누르면 1식 감소하는 프로그램을 만들려고 합니다.

 

버튼을 누를때마다 숫자가 바뀌어서 표시가 되어야 하기 때문에 'StringVar'를 사용합니다.

 

'count = StringVar(Value ='0')'으로 변수설정을 하면, 초기 값은 '0'으로 보여지며, 레이블(lbl_data)에서 'textvariable = count'로 옵션을 설정해하면 숫자가 바뀔때마다 표시가 됩니다.

 

버튼에 표시되는 텍스트는 리스트(str = ['더하기', '빼기])에서 인덱싱하는 방법으로 표시하였습니다. 아직 command는 지정하지 않았습니다.

 

위의 그림과 같이 만들어졌습니다.

이제 이벤트를 연결할 함수를 만들어 보겠습니다.

 

def add():

    = int(count.get())

    += 1

    count.set(n)

 

def sub():

    = int(count.get())

    -= 1

    count.set(n)

 

'count = StringVar(Value ='0')'로 만든 'count' 변수를 가져와서 int(정수) 행태로 'n'이라는 변수에 저장합니다. 함수가 실행되면 'n +=1'식처럼 1씩 더해집니다.

 

주의할 점은 'StringVar()'로 정의된 변수는 문자열 변수가 아니기 때문에 Set 메서드를 사용해야 한다고 합니다. 그래서 함수 마지막에 'count.set(n)'으로 설정해야지 레이블(lbl_data)에서 보여집니다.

 

빼기 함수(def sub():)도 동일한 방법으로 작성했습니다.

 

btn_add = Button(win, text=str[0], command=add)

 

btn_sub = Button(win, text=str[1], command=sub)

 

이제 각 버튼의 옵션에서 "command=sub" 로 미리 만든 함수와 연결해 줍니다.

 

더하기 버튼을 누르면 숫자가 1씩 더해지고

빼기 버튼을 누르면 숫자가 1씩 감소하는 것을 확인할 수 있습니다.

 

전체 코드는 아래와 같습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from tkinter import *
 
def add():
    n = int(count.get())
    n += 1
    count.set(n)
 
def sub():
    n = int(count.get())
    n -= 1
    count.set(n)
 
str = ['더하기''빼기']
 
win = Tk()
 
count = StringVar(value = '0')
 
lbl_data = Label(win, width=20, textvariable = count)
lbl_data.grid(row=0, column=0, columnspan=2)
 
btn_add = Button(win, text=str[0], command=add)
btn_add.grid(row=1, column=0)
btn_sub = Button(win, text=str[1], command=sub)
btn_sub.grid(row=1, column=1)
 
win.mainloop()
cs
728x90
반응형

댓글