본문 바로가기

wxPython

파이썬 GUI, 체크박스 생성 후 이벤트 연결하기

반응형

 

개요 

    체크박스(wx.CheckBox)는 ON / OFF가 가능한 라벨 텍스트 박스이다. 옵션에 따라 ON / OFF 외에도 제 3의 상태 (undetermined state)를 가질 수도 있다. 체크박스의 상태에 따라 텍스트가 변하는 간단한 어플을 구현해보자. 

 

 

wx.CheckBox 

    체크박스(wx.CheckBox)버튼(wx.Button)과 유사하게 아래와 같이 정의된다. 기본적으로 부모 객체와 id, 그리고 라벨 정도가 필요하고, 필요에 따라 컨트롤 포지션이나 사이즈 등도 옵션으로 변경이 가능하다. 

chkbox = wx.CheckBox(parent, id=wx.ID_ANY, label="체크박스라벨", pos=wx.DefaultPosition,
                     size=wx.DefaultSize, style=0, validator=wx.DefaultValidator, name="체크박스이름")

    parent: 체크박스가 놓이게 될 부모 객체 (wx.Panel 등..)

    id: 체크박스 아이디 정수값, wx.ID_ANY 혹은 -1 입력시 자동 할당 

    label: 체크박스에 표시되는 텍스트 값 

    pos: 부모 객체에서 체크박스 위치 좌표값 (x,y)

    size: 체크박스 크기 (x,y)

    style: 기본값으로 wx.CHK_2STATE(체크, 체크해제) 가 설정되어 있다. 필요에 따라 결정보류(undetermined state)를 의미하는 상태도 추가하여 wx.CHK_3STATE(체크, 체크해제, 결정보류) 로 설정할 수도 있다. 이 경우, 사용자 의사에 의해 결정보류를 체크하게 한다고 하면 wx.CHK_ALLOW_3RD_STATE_FOR_USER도 같이 추가해주어야 한다. (CHK_ALLOW_3RD_STATE_FOR_USER는 기본값이 아니다) 즉, style=wx.CHK_3STATE|wx.CHK_ALLOW_3RD_STATE_FOR_USER 로 상태를 지정해준다. 

결정 보류(undetermined state)를 의미하는 제3의 상태

예제 

    아래는 체크박스 위젯이 선택될 때 이벤트를 받아 텍스트를 변경하는 예제이다. 

반응형
import wx

class CheckBoxWindow(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self,parent,id,'CheckBox Window', size=(400,200))

        panel=wx.Panel(self)

        # 체크박스 정의
        # 입력변수는 순서대로 (Parent, ID, Label, Position, Size);  -1은 자동계산되는 값.
        self.cb1 = wx.CheckBox(panel, -1, "사과 (Apple)", (20,50), (160,-1))
        self.cb2 = wx.CheckBox(panel, -1, "배 (Pear)", (20, 70), (160, -1))
        self.cb3 = wx.CheckBox(panel, -1, "포도 (Grapes)", (20, 90), (160, -1))

        # 체크박스에 이벤트가 발생될 때 마다 self.OnCheck 함수 호출
        self.Bind(wx.EVT_CHECKBOX, self.OnChecked, self.cb1)
        self.Bind(wx.EVT_CHECKBOX, self.OnChecked, self.cb2)
        self.Bind(wx.EVT_CHECKBOX, self.OnChecked, self.cb3)

        # 호출을 알리는 텍스트
        self.text = wx.StaticText(panel, -1, "체크박스가 체크되면 텍스트가 변합니다.", pos=(10,20))

    # wx.EVT_CHECKBOX 이벤트 발생시 자동 호출되는 함수
    def OnChecked(self,event):
        # 어떤 체크박스를 눌렀는지 확인 후 해당 객체 리턴
        checkbox = event.GetEventObject()
        # 누른 체크박스의 레이블 (텍스트) 저장
        checkbox_label = checkbox.GetLabel()
        # 체크인지 해제인지 확인
        if checkbox.IsChecked():
            self.text.SetLabel(checkbox_label+" 체크됨")
        else:
            self.text.SetLabel(checkbox_label+" 체크 해제됨")


if __name__=="__main__":
    app = wx.App()
    frame=CheckBoxWindow(parent=None, id=-1)
    frame.Show()
    app.MainLoop()




 

 

 

 

 

    도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :) 

 

반응형