본문 바로가기

wxPython

파이썬 GUI, 메시지 다이얼로그 wx.MessageDialog

반응형

 

개요 

    메시지다이얼로그(wx.MessageDialog)를 출력해보자. 대화상자는 wx.OK, wx.CANCEL 버튼이 있고, 사용자의 버튼 선택에 따라 프레임을 스크린 중앙에 옮겨주는 기능을 구현한다. 예제는 프로그램을 켜고 5초가 지나면 대화상자가 뜬다. OK를 클릭하면 화면이 스크린 중앙으로 옮겨진다. 

 

 

wx.MessageDialog

    메시지다이얼로그(wx.MessageDialog)는 가장 간단한 wxPython 대화상자 위젯이다. 구현 방식에 따라 알림, 주의, 확인, 취소 등의 기능을 수행한다. 

modal = wx.MessageDialog(parent, message, caption="",
                         style=wx.OK|wx.CENTRE, pos=wx.DefaultPosition)
answer = modal.ShowModal()

    parent: 부모 클래스이며 보통 None으로 둔다. 

    message: 사용자에게 전달할 메시지 텍스트이다. 

    caption: 메시지 다이얼로그창의 제목이다. 

    style: 스타일은 기본적으로 wx.OK|wx.CANCEL 버튼을 둘 수 있고, 경우에 따라 아래와 같이 아이콘을 변경할 수도 있다. 

wx.ICON_WARNING
wx.ICON_INFORMATION
wx.ICON_HAND
wx.ICON_MASK

    아이콘의 종류를 모두 보고싶다면 아래와 같이 파이참에서 Ctrl 키를 누르고 마우스 좌클릭을 한 뒤, 

ICON_MASK에 마우스오버->Ctrl->좌클릭

    아래와 같이 __init__.py에 나오는 변수 값을 참고하면 된다. 

wx.ICON_ 종류 확인

 

 

wx.CallLater

    wx.CallLater는 지정된 시간(milliseconds)이 지나면 자동으로 지정된 함수를 실행시켜주는 역할을 한다. wx.CallLater의 초기화 함수는 아래와 같이 구현되어 있으므로, 인수로 시간(milliseconds)Callable 함수를 전달하면 된다. 

__init__(self, millis, callableObj, *args, **kwargs)

 

 

예제 

반응형
import wx

class MessageDialogEx(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self,parent,id,'MessageDialog Window', size=(300,200), pos=(100,50))

        panel=wx.Panel(self)

        # 카운트다운 텍스트
        self.text = wx.StaticText(panel, -1, "5", pos=(110,30))
        # 텍스트 폰트지정
        font = wx.Font(80, wx.FONTFAMILY_MODERN, wx.NORMAL, wx.BOLD)
        self.text.SetFont(font)

        # 프레임 표시 후 곧바로 카운트다운 시작
        wx.CallLater(0, self.CountDown)
        # 프레임 표시 후 5초뒤에 OnStart 함수 시작
        wx.CallLater(5000, self.OnStart)



    # 시작 5초후 실행
    def OnStart(self):
        # 메시지 다이얼로그 생성
        box=wx.MessageDialog(None, '화면을 가운데로 옮길까요?', '제목', wx.OK|wx.CANCEL)
        answer=box.ShowModal()
        # OK 누를시 프레임을 화면 중앙에 옮김
        if answer==wx.ID_OK:
            self.Center()
        box.Destroy()

    # 5초 카운트다운 함수
    def CountDown(self):
        sec = int(self.text.GetLabel())
        while sec > 0:
            # 1초마다 루브 돌기
            wx.Sleep(1)
            # 1씩 카운트다운
            sec -= 1
            # 변경된 숫자를 화면에 표시
            self.text.SetLabel(str(sec))


if __name__=="__main__":
    app = wx.App()
    frame=MessageDialogEx(parent=None, id=-1)
    frame.Show()
    app.MainLoop()

 

 

 

 

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

 

반응형