이번 포스팅은 함수를 이용해서 버튼 이벤트를 적용하는 방법을 공부할 것이다. Button 위젯에 command 를 추가해 함수로 연결해서 이벤트를 적용할 수 있다.
버튼 이벤트를 공부하고 나서는 Canvas 로 사각형을 만들어보자.
1 command
command 를 이용하면 함수로 연결해 이벤트를 적용할 수 있다.
다음과 같이 사용한다.
Button(command=연결할 함수)
예제를 통해 자세히 살펴보자. 다음과 같이 버튼을 생성해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from tkinter import *
win = Tk() # 윈도우창을 생성
win.geometry("300x300+100+100")
win.title("버튼 이벤트")
btn1 = Button(win,text="클릭하세요!")
btn2 = Button(win,text="클릭하세요!")
btn1.pack()
btn2.pack()
win.mainloop() # 윈도우창이 종료될 때까지 윈도우를 실행한다.
|
cs |
그리고 나서 함수를 적용해준다. btn1에 클릭하면 안녕하세요로 바뀌는 함수를 작성하고 command 로 btn1에 함수를 적용해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
from tkinter import *
win = Tk() # 윈도우창을 생성
win.geometry("300x300+100+100")
win.title("버튼 이벤트")
def process():
btn1['text'] = "안녕하세요"
# btn1이라는 아이 안의 text라는 key값을 이용해 데이터값을 변경하겠다는 의미
btn1 = Button(win,text="클릭하세요!",command=process)
btn2 = Button(win,text="클릭하세요!")
btn1.pack()
btn2.pack()
win.mainloop() # 윈도우창이 종료될 때까지 윈도우를 실행한다.
|
cs |
줄8에 btn1의 text를 "안녕하세요"로 변경하였다. 그리고 btn1에 command를 이용해 함수를 적용시켜 주었다.
따라서 클릭하면 다음과 같이 안녕하세요로 변경된다.
다음은 한번더 클릭할 경우에 다시 "클릭하세요!"로 변경하도록 해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
from tkinter import *
win = Tk() # 윈도우창을 생성
win.geometry("300x300+100+100")
win.title("버튼 이벤트")
def process():
btn1['text'] = "안녕하세요"
# btn1이라는 아이 안의 text라는 key값을 이용해 데이터값을 ""로 변경하겠다는 의미
# 버튼이 눌리면 클릭하세요 -> 버튼이 눌렸습니다. 를 함수로
def my_call():
if btn2['text'] == '클릭하세요!':
btn2['text'] = '버튼이 눌렸습니다.'
else:
btn2['text'] = '클릭하세요!'
btn1 = Button(win,text="클릭하세요!",command=process)
btn2 = Button(win,text="클릭하세요!",command=my_call)
btn1.pack()
btn2.pack()
win.mainloop() # 윈도우창이 종료될 때까지 윈도우를 실행한다.
|
cs |
줄13에 버튼의 텍스트가 "클릭하세요!" 일 경우 "버튼이 눌렸습니다."로 text값을 변경하고 아닐 경우 "클릭하세요!"로 변경하도록 if문을 사용해 코드를 짜주었다. 그리고 command를 이용해 btn2에 my_call 함수를 적용시켜주었다.
따라서 다음과 같이 두번째 버튼을 클릭하면 계속해서 텍스트가 변경된다.
2 Canvas 위젯
Canvas 위젯도 클래스형태이다. 또한 윈도우 창에서 스케치북 같은 역할로 안에 선, 다각형, 원 등을 생성할 수 있다.
Canvas(윈도우,파라미터1,파라미터2, ...)
다음 Canvas에 설정할 수 있는 설정값들이다.
캔버스 형태 설정
그러면 Canvas를 생성해보자.
1
2
3
4
5
6
7
8
9
10
|
from tkinter import *
win = Tk() # 윈도우창을 생성
win.title("Canvas") # 윈도우 타이틀 설정
can = Canvas(win,width=400,height=400,bg='pink')
can.pack() # 자동으로 칸맞춰 고정
win.mainloop() # 윈도우창이 종료될 때까지 윈도우를 실행한다.
|
cs |
위와 같이 캔버스의 너비와 높이를 400으로 설정해주고 배경을 pink로 설정해 주었다. Canvas의 크기를 설정해 줌으로써 윈도우 창은 스스로 Canvas 크기에 맞춰진다.
이제 Canvas 안에 사각형을 생성해보자. 사각형은 Canavas 위젯 내에 있는 create_rectangle() 메서드를 사용하여 만들 수 있다. 다음과 같이 생성시켜준다.
캔버스.create_rectangle(시작x,시작y,끝x,끝y,fill='색상')
1
2
3
4
5
6
7
8
9
10
11
12
|
from tkinter import *
win = Tk() # 윈도우창을 생성
win.title("Canvas") # 윈도우 타이틀 설정
can = Canvas(win,width=400,height=400,bg='pink')
can.create_rectangle(100,100,300,300,fill='blue') # 사각형 생성
can.pack() # 자동으로 칸맞춰 고정
win.mainloop() # 윈도우창이 종료될 때까지 윈도우를 실행한다.
|
cs |
캔버스 객체 can 내의 메서드 create_rectangle() 을 호출하고 그 내부에 좌표값과 fill 로 색상을 설정해주었다.
따라서 다음과 같이 사각형이 생성되었다.
추가로 객체의 좌상단 우하단 좌표를 리스트 형태로 반환하는 메서드 coords() 가 있다.
캔버스객체.coords(좌표반환을원하는객체)
위의 사각형 객체의 좌표를 반환하면 다음과 같다. 만들어준 사각형을 id1에 담고 coords를 이용하면 좌표값을 다음과 같이 반환해준다.
1
2
3
4
|
id1 = can.create_rectangle(100,100,300,300,fill='blue')
# 좌상단 우하단 좌표를 리스트로 반환하는 메서드 coords()
print(can.coords(id1))
|
cs |
댓글