개요
라디오박스(wx.RadioBox)는 라디오버튼(wx.RadioButton)을 그룹화 한 형태의 위젯이다. 라디오버튼보다 훨씬 직관적이고 코드가 간결해지는 장점이 있다.
개요
라디오박스 선언은 아래와 같다. 라디오 버튼과 다른 점은 choices, majorDimension, style 옵션일 것이다. 라디오박스에서는 이들이 유기적으로 연결되어 있는데, 먼저 style에서 행을 기준으로 나열할지 열을 기준으로 나열할지를 결정한다. 그 다음 majorDimension에서 행 혹은 열을 몇 개로 나열할 것인지 정한 뒤, choices에 있는 아이템 수 기준으로 최종 배치가 결정된다.
choices = ["choice1", "choice2", "choice3", "choice4"]
radiobox = wx.RadioBox(parent, id=ID_ANY, label="", pos=wx.DefaultPosition, size=wx.DefaultSize,
choices=[], majorDimension=0, style=wx.RA_SPECIFY_COLS, name="")
parent: 라디오박스가 속한 부모 클래스
id: 라디오박스 id로 보통 -1로 둔다.
label: 라디오박스 그룹의 문자열 레이블이다.
pos, size: 라디오박스의 위치와 크기 (x,y) 값이다.
choices: 라디오박스 선택지 문자열 리스트이다.
majorDimension: 라디오박스에 나열된 선택지의 행 또는 열 개수이다. 행인지 열인지는 style 옵션에서 결정된다.
style: 라디오박스의 옵션들을 행 기준으로 나열할지, 열 기준으로 나열할지를 결정한다. 만약 style=wx.RA_SPECIFY_COLS에 majorDimension=2 이면 라디오버튼을 2열로 나열하겠다는 뜻이다.
예제
아래 예제는 라디오박스를 이용하여 4지선다 문제를 구성한 것이다. choices, style, majorDimension으로 어떻게 라디오버튼을 배치하는지 보자. 여기서 style은 기본값(=wx.RB_SPECIFY_COLS)이 들어가 있다.
import wx
class RadioBtnExample(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self,parent,id,'RadioBtnExample Window')
panel=wx.Panel(self)
# 수직 박스사이저
vsizer = wx.BoxSizer(wx.VERTICAL)
hsizer = wx.BoxSizer(wx.HORIZONTAL)
# 폰트
font = wx.Font(12, wx.FONTFAMILY_MODERN, wx.NORMAL, wx.BOLD)
# 라디오박스 1
rb1_labels = ['대한민국', '일본', '중국', '캐나다']
self.radiobox1 = wx.RadioBox(panel, -1,
label='문제1) 아시아가 아닌 나라를 고르시오. ',
size=(-1, -1),
choices=rb1_labels,
name='Prob1',
majorDimension=2)
# 라디오박스 2
rb2_labels = ['큰곰자리', '카시오페아', '오리온', '플레이아데스']
self.radiobox2 = wx.RadioBox(panel, -1,
label='문제2) 별자리가 아닌 것을 고르시오. ',
size=(-1,-1),
choices=rb2_labels,
name='Prob2',
majorDimension=2)
vsizer.Add(self.radiobox1, 0, wx.ALL|wx.EXPAND, 20)
vsizer.Add(self.radiobox2, 0, wx.ALL|wx.EXPAND, 20)
hsizer.Add(vsizer, wx.EXPAND)
# 레이블 폰트설정
self.radiobox1.SetFont(font)
self.radiobox2.SetFont(font)
# 라디오버튼 눌릴시 이벤트 감지
self.Bind(wx.EVT_RADIOBOX, self.OnRadioClicked)
panel.SetSizer(hsizer)
hsizer.Fit(self)
def OnRadioClicked(self, event):
# 이벤트 호출한 객체의 이름, 레이블 확인
group = event.GetEventObject().GetName()
select = event.GetEventObject().GetSelection()
print(group)
if group=='Prob1': self.radiobox1.SetLabel("문제1) 아시아가 아닌 나라를 고르시오. "+ "[정답: " + str(select) + "]")
if group=='Prob2': self.radiobox2.SetLabel("문제2) 별자리가 아닌 것을 고르시오. " + "[정답: " + str(select) + "]")
if __name__=="__main__":
app = wx.App()
frame=RadioBtnExample(parent=None, id=-1)
frame.Show()
frame.Center()
app.MainLoop()
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
'wxPython' 카테고리의 다른 글
파이썬 GUI, 박스사이저 추가예제3 wx.BoxSizer (0) | 2023.02.26 |
---|---|
파이썬 GUI, 박스사이저 추가예제2 wx.BoxSizer (0) | 2023.02.26 |
파이썬 GUI, 라디오버튼 wx.RadioButton (0) | 2023.02.25 |
파이썬 GUI, 진행률 바 wx.Gauge (2) | 2023.02.25 |
파이썬 GUI, 박스사이저 wx.BoxSizer (0) | 2023.02.25 |