[Python] 파이썬의 GUI (Event)


바인드(이벤트)
버튼 누르거나 키를 누르거나 마우스를 눌렀을 때 실행을 도와주는 핸들러

사용하는 방법
- 위젯.bind()

이벤트발생시 Event Object 객체가 생성된다. 클래스 내에 정보를 가지고 잇다. 
event 매개변수가 반드시 필요하다. 


#tkinter_7.py

from tkinter import *
from random import *
from time import *

win = Tk()

#마우스를 클릭하면 그 위치를 출력해주는 Event 프로그램
def onClick(event):
    print(event.x,"    ",event.y)

def dleft(event):
    print("더블")

def mleft(event):
    print("모션")

#bind(위젯,함수명)
win.bind("<Button-1>",onClick)
win.bind("<Double-Button-1>",dleft)
win.bind("<B1-Motion>",mleft)

#"<Button-1>" 마우스 왼쪽 버튼
#"<Button-2>" 마우스 휠
#"<Button-3>" 마우스 오른쪽 버튼

#드래그
#<B1-Motion> : 마우스 왼쪽 버튼 누른 상태로 움직일 때
#B2 : 휠, B3 : 오른쪽

#더블클릭
#<Double-Button-1> 더블클릭 왼쪽

win.mainloop()


#tkinter_8.py

from tkinter import *
from random import *
from time import *

def onClick(event):
    print('키보드',event.keycode)
#키보드를 클릭했을 때 <Key>
#char : 키보드를 누른 값을 문자로 반환 ==> enter, f1, ctrl, 방향키 문자로 표현 할 수 없다.
#keycode : 아스키 코드값을 이용해서 반환
win = Tk()
win.bind("<Key>",onClick)
win.focus_set() #키보드가 눌리면 포커스를 수정


win.mainloop()


#tkinter_9.py

from tkinter import *
from random import *
from time import *

def onClick(event):
    print('키보드',event.keycode)

win = Tk()

#애니메이션 : 그림의 움직임을 주는 기법
#캔버스 공을 하나 만든다.
#move(객체,x,y) : 이동
#move에서 오른쪽으로 이동시 +, 왼쪽으로 이동시 -, 아래로 이동시 +, 위로 이동시 -
#update() : 기존 그림을 전부 지우고, 새로 그릴 수 있도록 하는 메서드
#sleep() : 시간 지연
#after() : ms 단위로 설정 1초 => 1000


can = Canvas(win,width=400,height=400)
can.pack()

id1 = can.create_oval(10,10,50,50,fill='pink')
for i in range(50):
    can.move(id1,5,0) #오른쪽으로 5씩 이동
    can.after(100) #0.1초 기다렸다가
    can.update() #새로 그림을 그린다.


win.mainloop()


#tkinter_10.py ( 키보드로 공을 움직이고, 색을 무작위 지정하기 )

from tkinter import *
from random import *
from time import *

def onClick(event):
    print('키보드',event.keycode)

#공 클래스 생성시 random으로 색 지정
color =['red','blue','yellow','pink','green','orange']
class Ball:
    def __init__(self,x,y,can):
        self.x=x
        self.y=y
        self.color = choice(color)
        self.can = can
        self.ball = self.can.create_oval(x,y,50,50,fill=self.color)
        print("ball")

        #이동 시의 메서드
    def move_left(self,event):
        can.move(self.ball, -5, 0)
        can.after(10)
        can.update()

    def move_right(self,event):
        can.move(self.ball, +5, 0)
        can.after(10)
        can.update()


win = Tk()
can = Canvas(win,width=400,height=400)
can.pack()
#키보드를 눌렀을 때 공을 좌우로 움직이기
ball = Ball(10,10,can)

can.bind("<Left>",ball.move_left)
can.bind("<Right>",ball.move_right)
can.focus_set()

win.mainloop()

댓글