반응형
개요
라디오버튼(wx.RadioButton)은 옵션 선택을 위한 문자열과 동그란 버튼으로 이루어진 위젯이다. 보통 단독으로는 쓰지 않고, 옵션 수에 맞게 여러 개의 라디오버튼을 하나의 그룹으로 사용한다. 예제를 통해 알아보자.
wx.RadioButton
라디오버튼(wx.RadioButton)의 선언은 아래와 같이 어렵지 않으나, 다른 위젯과 달리 보통 그룹으로 동작하기 때문에 두 개 이상의 라디오버튼이 한 그룹이 되는 것이 일반적이다.
radiobutton = wx.RadioButton(parent, id=ID_ANY, label="", pos=wx.DefaultPosition,
size=wx.DefaultSize, style=0, name="")
따라서 동일 그룹의 라디오 버튼이라는 것을 style 옵션을 통해 알려주어야 하는데, 방법은 동일 그룹에 속한 라디오 버튼 중 코드상으로 가장 위에 있는 라디오버튼 스타일에 style=wx.RB_GROUP 옵션을 적용하는 것이다. 그 외 나머지 옵션들은 다른 위젯들과 비슷하다.
parent: 라디오 버튼이 속한 부모 클래스
id: 라디오버튼 id로 보통 -1로 설정하여 자동으로 할당되도록 한다.
label: 라디오버튼의 텍스트 레이블이다.
pos, size: 라디오버튼의 위치와 크기 (x,y) 값이다.
style: 라디오버튼 스타일로 wx.RB_GROUP과 wx.RB_SINGLE 옵션이 있다.
name: 라디오버튼 위젯 이름이다.
예제
아래는 라디오버튼(wx.RadioButton)을 이용하여 4지선다 문제를 푸는 것을 구현한 예제이다.
반응형
import wx
class RadioBtnExample(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self,parent,id,'RadioBtnExample Window', size=(470,400))
panel=wx.Panel(self)
# 수직 박스사이저
bsizer = wx.BoxSizer(wx.VERTICAL)
# 폰트
font = wx.Font(12, wx.FONTFAMILY_MODERN, wx.NORMAL, wx.BOLD)
# 문제 1 텍스트
self.txt1 = wx.StaticText(panel, -1, "문제1) 아시아가 아닌 나라를 고르시오. ", pos=(20,10))
self.txt1.SetFont(font)
# 라디오버튼 그룹 1, 가장 위에 있는 라디오버튼에 wx.RB_GROUP을 붙여준다.
self.rb1 = wx.RadioButton(panel,-1, label = '1. 대한민국', pos = (30,40), name='문제1', style = wx.RB_GROUP)
self.rb2 = wx.RadioButton(panel,-1, label = '2. 일본', pos = (30,70), name='문제1')
self.rb3 = wx.RadioButton(panel,-1, label = '3. 중국', pos = (30,100), name='문제1')
self.rb4 = wx.RadioButton(panel, -1, label= '4. 캐나다', pos=(30,130), name='문제1')
# 문제 2 텍스트
self.txt2 = wx.StaticText(panel, -1, "문제2) 별자리가 아닌 것을 고르시오. ", pos=(20, 180))
self.txt2.SetFont(font)
# 라디오버튼 그룹 2
self.rb5 = wx.RadioButton(panel, -1, label='1. 큰곰자리', pos=(30, 210), name='문제2', style=wx.RB_GROUP)
self.rb6 = wx.RadioButton(panel, -1, label='2. 카시오페아', pos=(30, 240), name='문제2')
self.rb7 = wx.RadioButton(panel, -1, label='3. 오리온', pos=(30, 270), name='문제2')
self.rb8 = wx.RadioButton(panel, -1, label='4. 플레이아데스', pos=(30, 300), name='문제2')
# 라디오버튼 눌릴시 이벤트 감지
self.Bind(wx.EVT_RADIOBUTTON, self.OnRadioClicked)
def OnRadioClicked(self, event):
# 이벤트 호출한 객체의 이름, 레이블 확인
group = event.GetEventObject().GetName()
label = event.GetEventObject().GetLabel()
if group=='문제1': self.txt1.SetLabel("문제1) 아시아가 아닌 나라를 고르시오. "+ "[정답: " + str(label[:1]) + "]")
if group=='문제2': self.txt2.SetLabel("문제2) 별자리가 아닌 것을 고르시오. " + "[정답: " + str(label[:1]) + "]")
if __name__=="__main__":
app = wx.App()
frame=RadioBtnExample(parent=None, id=-1)
frame.Show()
frame.Center()
app.MainLoop()
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
반응형
'wxPython' 카테고리의 다른 글
파이썬 GUI, 박스사이저 추가예제2 wx.BoxSizer (0) | 2023.02.26 |
---|---|
파이썬 GUI, 라디오박스 wx.RadioBox (0) | 2023.02.25 |
파이썬 GUI, 진행률 바 wx.Gauge (2) | 2023.02.25 |
파이썬 GUI, 박스사이저 wx.BoxSizer (0) | 2023.02.25 |
파이썬 GUI, 슬라이더 wx.Slider (0) | 2023.02.25 |