Python2007.12.04 08:08
앞서 소개한 방법은 라디오버튼을 만들고, 그리드 컨트롤을 사용하여 라디오 버튼을 배치하고 이를 다시 StaticBox로 감싸서 배치해야 하는 번거로움이 있었다. wxPython에서는 이와 같은 과정을 하나의 함수로 간단하게 설정할 수 있는 컨트롤을 추가로 제공하는데 이것이 바로 RadioBox() 이다.

RadioBox()를 사용하면 다음과 같이 소스가 매우 간결해 진다.

사용자 삽입 이미지

RadioBox를 이용하여 두 개의 라디오 버튼 그룹 생성



#!/usr/bin/env python

"""11-2 RadioBox """

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

import wx

class Frame(wx.Frame):
    def __init__(self, parent=None, id=-1, title='RadioBox'):
        wx.Frame.__init__(self, parent, id, title, size=(300,300), pos=(100,100) )
        panel = wx.Panel(self)

        sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
                      'six', 'seven', 'eight']
        wx.RadioBox(panel, -1, "Group A", (10,10), wx.DefaultSize,sampleList,2,wx.RA_SPECIFY_COLS)
        wx.RadioBox(panel, -1, "", (10,150), wx.DefaultSize,sampleList,3,wx.RA_SPECIFY_COLS)       
         
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
Python2007.12.04 07:57
라디오 버튼은 일반적으로 그룹 단위로 배치되기 마련이다. 그룹으로 묶어서 배치하려면 grid를 이용해 나열하고, 이를 하나의 박스로 묶어서 출력해야 한다. 나름대로 꽤 복잡해 진다.
사용자 삽입 이미지

#!/usr/bin/env python

"""11-1b. RadioButton """

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

import wx

class Frame(wx.Frame):
    def __init__(self, parent=None, id=-1, title='RadioButton'):
        wx.Frame.__init__(self, parent, id, title, size=(300,300), pos=(100,100) )
        #wx.Panel.__init__(self, parent, -1)
        panel = wx.Panel(self)

        #layout controls
        vs = wx.BoxSizer(wx.VERTICAL)   #수직으로 나열
        box1_title = wx.StaticBox(panel,-1,"그룹 1")  #그룹 타이틀, 테두리 지정
        box1 = wx.StaticBoxSizer(box1_title,wx.VERTICAL) #테두리 설정
        grid1 = wx.FlexGridSizer(0,1,0,0) #가로,세로, 간격 지정
       
        radio1 = wx.RadioButton(panel,-1,"라디오1",style=wx.RB_GROUP)
        radio2 = wx.RadioButton(panel,-1,"라디오2")
        radio3 = wx.RadioButton(panel,-1,"라디오3")

        grid1.Add(radio1,0,wx.ALIGN_CENTRE, 5)
        grid1.Add(radio2,0,wx.ALIGN_CENTRE, 5)
        grid1.Add(radio3,0,wx.ALIGN_CENTRE, 5)
       
        box1.Add(grid1,0,wx.ALIGN_CENTRE|wx.ALL,5)
        vs.Add(box1, 0, wx.ALL, 5)

        panel.SetSizer(vs)
        vs.Fit(panel)
       
       
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()

자, 여기서 FlexGridSizer 값을 변경 시키면 배열을 원하는대로 할 수 있다.
버튼을 가로로 나열해 보자.

grid1 = wx.FlexGridSizer(1,0,0,0) #가로,세로, 간격 지정

사용자 삽입 이미지

간격값을 증가시키면 라디오 버튼간의 간격도 조절할 수 있다.
grid1 = wx.FlexGridSizer(0,1,15,0) #가로,세로, 간격 지정

사용자 삽입 이미지

Posted by getcome
Python2007.11.28 07:22
간단한 라디오 버튼을 만들어 보자. RadioButton()으로 버튼을 만든다.

RadioButton API ref.: http://www.wxpython.org/docs/api/wx.RadioButton-class.html

사용자 삽입 이미지
#!/usr/bin/env python

"""11-1a. RadioButton """

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

import wx

class Frame(wx.Frame):
    def __init__(self, parent=None, id=-1, title='RadioButton'):
        wx.Frame.__init__(self, parent, id, title, size=(300,300), pos=(100,100) )
        panel = wx.Panel(self)
        radio1 = wx.RadioButton(panel,-1,"라디오1",(35,40))
        radio2 = wx.RadioButton(panel,-1,"라디오2",(35,60))
        radio3 = wx.RadioButton(panel,-1,"라디오3",(35,80))
       
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