반응형
개요
경우에 따라 창의 현재 위치나 크기를 알아야 할 때가 있다. 이 경우 어떤 방식으로 값을 얻어오는지 예제를 통해 알아본다. 추가로 키보드 조작을 통해 창 크기를 변경하는 방법도 알아본다.
wx.EVT_MOVE
창이 움직일때 발생하는 이벤트이다. 아래와 같이 바인딩하여 움직임을 감지한다. self는 wx.Frame 객체이며, 프레임 이동 이벤트가 감지 되면 self.OnMove 함수가 작동한다.
self.Bind(wx.EVT_MOVE, self.OnMove)
한편, 창이 움직일 때 좌표 값을 얻어오는 함수는 GetPosition() 이고, 창의 크기는 GetSize()로 얻는다.
wx.EVT_CHAR_HOOK
키보드를 누를 때 발생하는 이벤트이다. 해당 이벤트로 실행된 함수에서 event.GetKeyCode()로 눌린 키코드를 알 수 있고, 화살표 키(↓↑→←)는 다음과 같이 미리 정의된 키코드로 인식한다.
아래 화살표 키: wx.WXK_DOWN
위 화살표 키: wx.WXK_UP
왼쪽 화살표 키: wx.WXK_LEFT
오른쪽 화살표 키: wx.WXK_RIGHT
예제
창 위치 값을 받아 이벤트를 발생하는 예제이다. 화살표 키를 눌러 창 크기를 변경할 수도 있다.
반응형
import wx
class FrameMoveEvent(wx.Frame):
# FrameMoveEvent 클래스 초기화
def __init__(self, parent, id):
# Frame 초기화
wx.Frame.__init__(self, parent, id, title='FrameMoveEvent Window!', pos=(200,100),size=(450, 350))
panel = wx.Panel(self,-1)
# 프레임에 움직임 이벤트를 바인딩
# 움직임 감지되면 OnMove 함수 실행
self.Bind(wx.EVT_MOVE, self.OnMove)
self.Bind(wx.EVT_CHAR_HOOK, self.OnArrowDown)
# 하단 상태표시줄 생성
self.status = self.CreateStatusBar()
# 텍스트
self.text1 = wx.StaticText(panel, -1, "키보드 화살표를 눌러보세요!! ↑ ↓ → ← ", pos=(30,50), size=(-1,-1))
# 창 크기 텍스트
self.framesize = self.GetSize()
self.text2 = wx.StaticText(panel, -1, "창 크기: "+str(self.framesize), pos=(30, 80), size=(-1,-1))
def OnArrowDown(self, event):
# 프레임 객체 사이즈 저장
x,y = self.GetSize()
# 키보드 화살표 확인 후 프레임 사이즈 변경
if event.GetKeyCode() == wx.WXK_DOWN: self.SetSize(x,y+10)
if event.GetKeyCode() == wx.WXK_UP: self.SetSize(x,y-10)
if event.GetKeyCode() == wx.WXK_LEFT: self.SetSize(x-10,y)
if event.GetKeyCode() == wx.WXK_RIGHT: self.SetSize(x+10,y)
# 프레임 사이즈 텍스트 업데이트
self.framesize = self.GetSize()
self.text2.SetLabel("창 크기: "+str(self.framesize))
def OnMove(self, e):
# 현재 창의 위치 저장
x, y = e.GetPosition()
# 상태표시줄 텍스트 변경
self.status.SetLabel(" 창을 움직이면 위치가 변합니다 (X위치: "+str(x)+", Y위치: "+str(y)+")")
if __name__=="__main__":
app = wx.App()
frame=FrameMoveEvent(parent=None, id=-1)
frame.Show()
app.MainLoop()
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
반응형
'wxPython' 카테고리의 다른 글
파이썬 GUI, 메시지 다이얼로그 wx.MessageDialog (0) | 2023.02.25 |
---|---|
파이썬 GUI, 텍스트입력다이얼로그 wx.TextEntryDialog (0) | 2023.02.24 |
파이썬 GUI, 싱글초이스다이얼로그 wx.SingleChoiceDialog (0) | 2023.02.22 |
파이썬 GUI, 체크박스 생성 후 이벤트 연결하기 (0) | 2023.02.22 |
파이썬 GUI, 버튼 생성 후 이벤트 등록하기 (0) | 2023.02.12 |