파이썬 강의/wx

파이썬 GUI(wxPython) 4. 다이얼로그

마리사라 2021. 1. 5. 15:51
반응형

이번 강의는 wxPython의 다이얼로그에 대해서 알아보겠습니다.

 


1. Yes or No

 

윈도우 10 다이얼로그

 

다이얼로그는 위의 예/아니오를 누를수 있는 알림처럼 무언가의 정보를 보여주거나 응답을 주고받는 창 입니다.

 

wxPython에서 다이얼로그는 공통적으로 다음과 같은 코드로 만들어 집니다.

 

MessageDialog(parent, message, caption, stlye, pos)

각각의 파라미터는 다음과 같습니다.

 

  • parent : 부모 Window창 설정.
  • message : 다이얼로그의 메세지를 설정.
  • caption : 다이얼로그의 제목을 설정.
  • style : 다이얼로그의 style을 설정.
  • pos : 표시될 다이얼로그의 위치를 설정. 적지 않을 경우 디폴트값이 들어가게됨

 

예시로 버튼을 눌렀을 때, Yes or No 다이얼로그가 나타나도록 해보겠습니다.

dialog = wx.MessageDialog(self, '정말로 누르셨습니까?', '확인', wx.YES_NO)

이렇게 하면 기본적인 Yes or No 다이얼로그가 만들어집니다.

 

하지만 버튼을 눌러도 다이얼로그는 표시되지 않습니다. 그 이유는 이벤트에 다이얼로그를 보여주는 코드를 삽입하지 않아서입니다.

dialog.ShowModal()

이제 프로그램을 실행하여 버튼을 눌러보겠습니다.

 

 

Yes or No 다이얼로그

 

 

이번에는 예 또는 아니오를 눌렀을 때 반응하는 코드를 만들어 보겠습니다.

# dialog.ShowModal()
if dialog.ShowModal() == wx.ID_YES:
    print("예")
else:
    print("아니오")

우선 앞의 ShowModal은 주석 처리해서 같은 창이 두번 뜨지 않도록 합니다.

 

그 이후 해당 다이얼로그의 값이 Yes일 경우 "예"를, 그 외의 값(No)일 경우 "아니오"를 출력하는 코드로 만들어 보았습니다.

 

예 또는 아니오

 

이제 예 또는 아니오를 눌렀을 때 특별한 행동을 하도록 만들 수 있습니다.

 

dialog.Destroy()

마지막에는 꼭 Destroy를 입력하여 다이얼로그가 정상적으로 종료하도록 하는게 좋습니다.

 

Destroy가 없어도 다이얼로그는 사라지지만, 해당 코드를 입력함으로써 오류가 날 확률을 줄일순 있습니다.


2. OK

이번에는 하위 메뉴를 눌렀을 때, OK 다이얼로그가 나오도록 해보겠습니다.

 

우선 새로운 MenuClick 함수를 만들어줍니다.

def MenuClick(self, event):
    dialog = wx.MessageDialog(self, '메뉴를 누르셨습니다', '메뉴', wx.OK)
    dialog.ShowModal()
    dialog.Destroy()

MenuClick함수와 ButtonClick함수의 차이는 wx.YES_NO와 wx.OK의 차이입니다.

 

이후 하위 메뉴를 클릭했을때 호출되는 함수를 ButtonClcik에서 MenuClick함수로 바꾸어줍니다.

self.Bind(wx.EVT_MENU, self.MenuClick, id=101)

이제 이대로 실행해 보겠습니다.

 

 

OK 다이얼로그

 

이 다이얼로그 역시 확인키를 눌렀을 때, 추가적인 작업을 하도록 만들 수 있습니다.


3. CANCEL

이번에는 확인/취소 다이얼로그인 CANCEL을 만들어보겠습니다.

 

먼저 메뉴의 하위 메뉴로 종료 메뉴를 만들어 보겠습니다.

menu.Append(102, '종료')

그 이후 종료 하위 메뉴를 눌렀을 때 작동하는 Quit함수를 만들어 보겠습니다.

def Quit(self, event):
    dialog = wx.MessageDialog(self, '종료하시겠습니까?', '종료', wx.CANCEL)
    if dialog.ShowModal() == wx.ID_OK:
        quit(0)
    else:
        pass
    dialog.Destroy()

위 다이얼로그에서 OK를 누르면 파이썬의 quit함수가 호출되어 프로그램이 종료되고, 그 외(취소)를 눌렀을 경우에는 아무 일도 일어나지 않는 원리입니다.

 

마지막으로 종료 메뉴를 해당 함수와 연결해주겠습니다.

self.Bind(wx.EVT_MENU, self.Quit, id=102)

 

이제 해당 함수가 작동하는지 확인해보겠습니다.

 

 

확인/취소 다이얼로그

 

이때 확인을 누르면 정상적으로 프로그램이 종료되는것을 확인하실 수 있습니다.


4. 마치며

이번에는 wxPython의 3가지 다이얼로그인 YES_NO, OK, CANCEL을 알아보았습니다. 다음에는 여러 위젯을 화면에 띄우는 방법중 하나인 Sizer에 대해서 알아보겠습니다.

반응형