개요
선택지를 여러 개 주고 하나만 선택하게하는 싱글초이스다이얼로그(wx.SingleChoiceDialog)를 구현해보자.
wx.SingleChoiceDialog
싱글초이스다이얼로그(wx.SingleChoiceDialog)는 이름에서 알 수 있듯이 대화상자(Dialog) 형태의 위젯이다. 여러 개의 문자열 선택지로 구성되어 있으며, 그 중 하나만 유저가 선택할 수 있다.
single_cd = wx.SingleChoiceDialog(parent, message, caption, choices, style=0, pos=wx.DefaultPosition)
parent: 싱글초이스 다이얼로그가 놓이는 부모 오브젝트, 보통 None으로 둔다.
message: 대화상자 상단에 놓이는 텍스트
caption: 대화상자 제목
choices: 선택지 리스트
style: wx.OK, wx.CANCEL로 OK, Cancel 버튼을 둘 수가 있고, wx.CENTRE로 메시지를 중앙에 놓을 수 있다.
pos: 다이얼로그 위치
한편, 대화상자에서 사용자가 선택한 값은 single_cd.GetStringSelection() 으로 알 수 있다. 만약 선택만 하고 Cancel을 눌러 취소한 경우, single_cd.ShowModal() 값이 wx.CANCEL로 저장되어 취소여부를 알 수 있다.
wx.Font
위젯에 보이는 글꼴을 변경할 때 사용하는 클래스이다. 아래와 같이 폰트 설정(font)을 지정해두고, 폰트를 변경할 오브젝트에 ".SetFont(font)" 속성을 넣어주면 된다.
font = wx.Font(pointSize, family, style, weight, underline=False,
faceName="", encoding=wx.FONTENCODING_DEFAULT)
textwidget.SetFont(font)
pointsize: 글꼴 크기
family: 글씨체
style: wx.FONTSTYLE_NORMAL , wx.FONTSTYLE_SLANT, wx.FONTSTYLE_ITALIC 총 3 가지 옵션이 있다.
weight: wx.FONTWEIGHT_THIN, wx.FONTWEIGHT_LIGHT, wx.FONTWEIGHT_NORMAL, wx.FONTWEIGHT_BOLD, wx.FONTWEIGHT_HEAVY 등이 있다. 전체 옵션은 다음링크를 참조하자. (https://docs.wxpython.org/wx.FontWeight.enumeration.html#wx-fontweight)
underline: 밑줄
facename: 현재 폰트 설정에 대해 별도의 이름을 붙일 때 사용한다. 지정하지 않아도 무방.
encoding: 폰트 인코딩 방식 옵션은 다음 링크를 참조하자.(https://docs.wxpython.org/wx.FontEncoding.enumeration.html#wx-fontencoding)
예제
아무 키나 누르면 싱글초이스다이얼로그를 여는 이벤트가 발생한다. 사용자가 옵션 중 하나를 선택하여 OK를 누르면 그 값이 텍스트 레이블로 뜨는 예제이다.
import wx
class SingleChoiceDialogEx(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self,parent,id,'SingleChoiceDialog Window', size=(400,200))
panel=wx.Panel(self)
text = wx.StaticText(panel, -1,
"SingleChoiceDialog 예제입니다.\n\n아무키나 누르세요...",
pos=(20,30),size=(250,-1))
# 선택된 항목을 디스플레이하기 위해
# 빈 텍스트를 생성한다.
self.choice_text = wx.StaticText(panel, -1,
"",
pos=(20,110),size=(250,-1))
# 선택한 메뉴를 눈에 잘 띄게 하기 위해 폰트도 설정!!
font = wx.Font(15, wx.FONTFAMILY_MODERN, wx.NORMAL, wx.BOLD, underline=wx.OK)
self.choice_text.SetFont(font)
# 키보드를 누르면 대화상자가 뜨게한다
panel.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
def OnKeyDown(self, event=None):
# 싱글초이스 대화상자
menu = ['삼겹살', '살치살', '항정살', '갈매기살', '목살']
modal = wx.SingleChoiceDialog(None, "메뉴를 하나만 고르세요:)", '[주문]', menu)
# 사용자가 OK를 누르면,
if modal.ShowModal()==wx.ID_OK:
# 사용자의 선택항목을 저장하고,
choice = modal.GetStringSelection()
# 텍스트를 화면에 보여줌
self.choice_text.SetLabel(choice+"을 선택하셨습니다!!")
# 작업 완료 후 Destroy를 눌러 자원에서 삭제해준다
modal.Destroy()
if __name__=="__main__":
app = wx.App()
frame=SingleChoiceDialogEx(parent=None, id=-1)
frame.Show()
app.MainLoop()
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
'wxPython' 카테고리의 다른 글
파이썬 GUI, 텍스트입력다이얼로그 wx.TextEntryDialog (0) | 2023.02.24 |
---|---|
파이썬 GUI, 창 움직임 트래킹 Frame Movement Tracking (0) | 2023.02.22 |
파이썬 GUI, 체크박스 생성 후 이벤트 연결하기 (0) | 2023.02.22 |
파이썬 GUI, 버튼 생성 후 이벤트 등록하기 (0) | 2023.02.12 |
파이썬 GUI, 메뉴바 만들기 wx.Menubar (0) | 2023.02.12 |