개요
가장 많이 쓰는 위젯인 버튼(wx.Button)을 생성하고, 눌렀을 때 프로그램이 닫히는 이벤트를 구현해본다.
wx.Button
버튼(wx.Button)은 문자열을 포함하고 가장 자주 쓰이는 위젯이다. 버튼은 보통 패널(wx.Panel) 위나 다이얼로그 상자(wx.Dialog)나 혹은 윈도우(wx.Frame) 창 위에도 놓일 수 있다. 변수 선언은 다음과 같이 한다.
btn = wx.Button(parent, id=wx.ID_ANY, label="버튼라벨", pos=wx.DefaultPosition,
size=wx.DefaultSize, style=0, validator=wx.DefaultValidator,
name="")
버튼을 정의할 때 필요한 각각의 인수에 대해 설명하면 아래와 같다.
parent는 버튼의 부모 클래스로 wx.Panel 등 버튼이 놓이게 될 상위 오브젝트가 된다.
id는 특별한 경우가 아니면 임의 할당이 되도록 -1 혹은 wx.ID_ANY를 입력한다.
label은 버튼에 표시되는 텍스트 문구이다.
pos는 튜플로 된 스크린상에서 버튼의 위치 (x,y) 픽셀 좌표이다.
size는 튜플로 된 버튼의 픽셀 크기 (x,y) 이다.
style은 버튼 레이블의 정렬위치나 경계라인을 결정짓는 인수이다. 일반적인 경우에는 빠뜨려도 무방하다. 자세한 설명은 wxPython 공식사이트를 참조하자. (https://docs.wxpython.org/wx.Button.html#styles-window-styles)
Event Handling (Bind)
버튼을 눌렀을 때 어떤 기능을 수행하기 위해서는 이벤트 핸들링을 해야 한다. 이벤트란 키보드 누르기나 마우스 클릭 등 사용자의 어떤 행위를 의미하고, 이러한 이벤트를 프로그램에서 처리하는 것을 이벤트 핸들링이라고 한다. 특히, wxPython에서는 이벤트 핸들링을 위해 Bind를 많이 사용한다.
Bind는 아래와 같이 호출할 수 있다.
self.Bind(wx.EVT_BUTTON, self.OnCloseBtnPressed, btn)
self는 wx.Frame이며 윈도우 프레임에 이벤트 핸들러를 바인딩 한다고 생각하면 된다.
첫 번째 인수는 이벤트 종류를 결정한다. 여기서는 버튼을 눌렀을 때 생기는 이벤트(wx.EVT_BUTTON)이다.
두 번째 인수는 이벤트 발생시 호출할 함수명이다.
그리고 마지막 인수는 해당 이벤트를 발생시키는 버튼 객체이다.
예제
아래는 버튼을 누르면 이벤트 핸들러를 작동시켜 프로그램 종료를 하는 예제이다.
import wx
class ButtonExample(wx.Frame):
def __init__(self):
# Frame 초기화
wx.Frame.__init__(self,
None,
id=wx.ID_ANY, # id에 -1 혹은 wx.ID_ANY를 입력하면 자동으로 아이디가 할당
title='Button Example',
size=(280,200), pos=(100,100)) # 창 사이즈와 위치를 조절
# 버튼을 포함할 패널을 생성한다.
panel = wx.Panel(self,-1)
# 버튼 객체 생성
closebtn = wx.Button(parent=panel, # 부모클래스 = panel
id=wx.ID_ANY, # 아이디 = 임의 할당
label="프로그램 종료", # 버튼 텍스트
pos=(50,50), # 부모클래스(패널)에서 버튼의 위치
size=(150,40)) # 버튼 크기
# 버튼을 눌렀을 때 실행될 함수 지정
self.Bind(wx.EVT_BUTTON, self.OnCloseBtnPressed, closebtn) # argument: 이벤트 종류 / 실행할 함수 / 이벤트핸들러(버튼)
def OnCloseBtnPressed(self, event):
# 창 닫기
self.Close(True)
if __name__ == "__main__":
app = wx.App()
window = ButtonExample()
window.Show()
# app 실행
app.MainLoop()
버튼(closeBtn)을 누르면 self.OnCloseBtnPressed 함수가 호출되고 프레임(self)이 닫힌다.
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
'wxPython' 카테고리의 다른 글
파이썬 GUI, 싱글초이스다이얼로그 wx.SingleChoiceDialog (0) | 2023.02.22 |
---|---|
파이썬 GUI, 체크박스 생성 후 이벤트 연결하기 (0) | 2023.02.22 |
파이썬 GUI, 메뉴바 만들기 wx.Menubar (0) | 2023.02.12 |
파이썬 GUI, wxPython Hello World! (0) | 2023.02.12 |
파이썬 GUI, 왜 wxPython 인가? (1) | 2023.02.11 |