지난번 포스트는 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():
n = int(count.get())
n += 1
count.set(n)
def sub():
n = int(count.get())
n -= 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 |
'파이썬(Python) > 파이썬 GUI(PyQt5 & tkinter)' 카테고리의 다른 글
tkinter - 섭씨 온도를 화씨온도로 변환하는 프로그램 만들기 (0) | 2021.10.12 |
---|---|
tkinter - 그리드를 이용해서 레이블, 엔트리, 버튼 배치하기 (0) | 2021.10.08 |
tkinter - 레이블, 엔트리, 버튼 만들기 (0) | 2021.10.06 |
tkinter - 윈도우 창 만들기 (0) | 2021.10.02 |
PyQt5 - (Qt designer) QFileDialog 를 이용하여 여러파일 이름 출력 (0) | 2020.12.17 |
댓글