본문 바로가기
Python/tkinter

[Python tkinter] tkinter 모듈을 이용한 GUI - 버튼 이벤트(bind) 와 Canvas 위젯

by dev수니 2021. 4. 7.
반응형

 

 

이번 포스팅은 함수를 이용해서 버튼 이벤트를 적용하는 방법을 공부할 것이다. 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

 

 

 

 

반응형

댓글