Python2007.11.28 07:00
체크 박스의 스타일을 설정함에 따라 3-state 체크 박스을 만들 수 있다. 체크가 안되어 있으면 0, 체크를 하면 1, 3-state 일 때는 2의 상태값을 가진다.

style: wx.CHK_2STATE, wx.CHK_3STATE, wx.CHK_ALLOW_3RD_STATE_FOR_USER

wx.CHK_ALLOW_3RD_STATE_FOR_USER 는 사용자가 직접 3-state 상태를 설정할 수 있고, 이 스타일을 적용하지 않으면 사용자가 3-state를 설정할 수 없고 코딩으로만 설정할 수 있다.
사용자 삽입 이미지

#!/usr/bin/env python

"""10-5c. checkbox """

# http://withrobot.tistory.com
# 2007.11.28

import wx

class Frame(wx.Frame):
    def __init__(self, parent=None, id=-1, title='CheckBox'):
        wx.Frame.__init__(self, parent, id, title, size=(300,300), pos=(100,100) )
        panel = wx.Panel(self)
        ck1 = wx.CheckBox(panel,-1,"체크1",(35,40),(150,20))
        ck2 = wx.CheckBox(panel,-1,"체크2",(35,60),(150,20))
        ck3 = wx.CheckBox(panel,-1,"체크3",(35,80),(150,20))
        ck4 = wx.CheckBox(panel,-1,"3-state",(35,120),(150,20),style=wx.CHK_3STATE|wx.CHK_ALLOW_3RD_STATE_FOR_USER)
        ck5 = wx.CheckBox(panel,-1,"체크5",(35,160),(150,20),style=wx.ALIGN_RIGHT)

        self.Bind(wx.EVT_CHECKBOX, self.EvtCheckBox, ck1)
        self.Bind(wx.EVT_CHECKBOX, self.EvtCheckBox, ck2)
        self.Bind(wx.EVT_CHECKBOX, self.EvtCheckBox, ck3)
        self.Bind(wx.EVT_CHECKBOX, self.EvtCheckBox, ck4)
        self.Bind(wx.EVT_CHECKBOX, self.EvtCheckBox, ck5)
       
        self.st = wx.StaticText(panel,-1, "check",(35,200))
        self.st2 = wx.StaticText(panel,-1, "val", (100,200))
       
    def EvtCheckBox(self, event):
        cb = event.GetEventObject()
        self.st.SetLabel(cb.GetLabelText())
        if cb.Is3State():
            self.st2.SetLabel(str(cb.Get3StateValue()))
        else:
            self.st2.SetLabel(str(cb.IsChecked()))
       
class App(wx.App):
    def OnInit(self):
        self.frame = Frame()
        self.frame.Show()
        return True

def main():
    app = App()
    app.MainLoop()

if __name__ == '__main__':
    main()
Posted by getcome