본문 바로가기

wxPython

파이썬 GUI, 싱글초이스다이얼로그 wx.SingleChoiceDialog

반응형

 

개요 

    선택지를 여러 개 주고 하나만 선택하게하는 싱글초이스다이얼로그(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()

 

 

 

 

    도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :) 

 

반응형