파이썬 강의/wx

파이썬 GUI(wxPython) 2. 버튼과 버튼이벤트

마리사라 2021. 1. 4. 20:54
반응형

이번 강의는 wx의 위젯 중 하나인 버튼과, 그 버튼의 이벤트 처리에 관한 강의입니다.


1. 버튼

윈도우 계산기 프로그램

버튼은 거의 모든 프로그램에 존재합니다. 특히 강의의 최종 목표인 계산기에는 숫자를 표시하는 부분을 제외하면 모두 버튼이라고 할 수 있습니다.

 

wx에서 버튼은 매우 간단하게 만들어집니다.

self.button = wx.Button(self, id=1, label='버튼')

위 코드는 button이라는 새로운 wx.Button을 만드는 코드입니다. wx.Button도 여러 파라미터를 넣어줄 수 있습니다.

  • parent : 어디에 만들어 지는지를 설정합니다. None이 들어갈 수 없습니다.
  • id : 버튼의 고유코드를 부여합니다. ID_ANY를 넣으면 기본값이 들어갑니다.
  • label : 버튼에 나타나는 글자를 입력합니다.
  • pos : 버튼의 위치를 입력합니다
  • size : 버튼의 크기를 입력합니다. 만약 입력하지 않는다면 자동으로 설정됩니다.
  • style : 버튼의 스타일을 설정합니다. 스타일은 숫자로 들어갑니다
  • validator : 유효성 검사자 여부
  • name : 이름을 정해줍니다. id와는 다릅니다.

버튼을 만들 때, button과 self.button은 거의 같지만, self를 붙이지 않고 바로 button으로 만들면 다른 함수나 class에서 호출할 수 없습니다.

 

이제 이전의 코드와 합쳐서 실행해보도록 하겠습니다.

 

버튼이 추가된 GUI

살짝 헷갈리실 수 있지만, 버튼의 크기가 화면 전체이므로 화면 어디를 클릭하셔도 버튼을 클릭하실 수 있습니다.

 

이제 버튼은 만들었습니다. 하지만 버튼을 아무리 클릭해도 아무런 변화가 일어나지 않습니다. 이는 버튼에 Event를 설정해주지 않았기 때문입니다.


2. 버튼 이벤트

버튼을 눌렀을 때, 무언가가 일어나게 하려면 이벤트를 설정해 주어야 합니다.

 

우선, 버튼을 누르면 파이썬에서 "눌렀다!"라는 문장이 출력되도록 해보겠습니다.

def ButtonClick(self):
    print("눌렀다!")

위와 같은 코드를 넣고 실행해도, 버튼을 클릭했을 때 아무런 변화가 일어나지 않습니다. 그 이유는 버튼과 해당 이벤트를 연결해주는 코드가 누락되었기 때문입니다.

 

self.Bind(wx.EVT_BUTTON, self.ButtonClick, id=1)
# self.Bind(wx.EVT_BUTTON, self.ButtonClick, self.button)

이벤트를 연결해주는 코드는 Bind입니다. Bind는 대표적으로 4가지 파라미터가 있습니다.

  • event : 이벤트의 종류를 선언
  • handler : 호출할 이벤트를 지정
  • source : 이벤트를 호출하는 소스를 지정.
  • id : 이벤트를 호출하는 소스의 id를 지정.

이때 source와 id는 한쪽만 입력하면 됩니다. 이제 이벤트와 연결했으니 버튼을 클릭해보겠습니다.

 

버튼 이벤트

이제 버튼을 누를 때마다 파이썬에서 해당 코드가 실행되는 것을 볼 수 있습니다. 아직은 print문을 호출하는 것뿐이지만, 나중에는 여러 가지를 할 수 있을 것입니다.


3. 마치며

wxPython에서 가장 흔한 버튼과 버튼을 눌렀을 때 호출하는 버튼 이벤트를 알아보았습니다. 다음번에는 메뉴와 메뉴바를 만드는 방법을 알려드리겠습니다.

반응형