개요
wxPython을 이용하여 Hello World! 가 적힌 윈도우를 띄워보고 GUI 프레임워크가 어떤식으로 동작하는지 이해해보자.
wxPython 앱의 구조
wxPython은 크게 두 부분으로 되어있다.
- wx.App - wxPython GUI 툴킷을 시작하는 부트스트랩. 백그라운드에서 동작하며 사용자에게는 보이지 않는다.
- wx.Frame - 실제 사용자에게 보이는 부분으로 프로그램 윈도우 창에 해당하는 부분이다. wxPython에서 wxFrame과 Window는 동의어이다.
wx.App
GUI를 백그라운드에서 관장하는 wx.App 함수는 아래와 같이 app 변수에 할당할 수 있다. 이 코드를 실행하면 실행은 되겠지만 사용자 눈에는 아직 아무것도 보이지 않는다. 변수 할당만 되었기 때문이다.
app = wx.App()
모든 wxPython 앱은 1개의 wx.App 인스턴스를 갖는다. 그리고 wx.App이 완전히 실행되고 나서야 wx.Widgets나 wx.Events, 그리고 여러 UI 오브젝트들을 프로그램적으로 다룰 수 있기 때문에 wx.App은 앱에 가장 먼저 넣어줘야 하는 구문이다. 그리고 이렇게 wx.App을 변수에 할당하고 나면 반드시 실행을 시켜줘야 프로그램이 돌아가는데 이를 수행하는 함수가 바로 MainLoop()이다.
app.MainLoop()
즉, 사용자 눈에는 보이지 않지만 가장 간단한 wxPython 앱은 위의 두 줄로 구성이 된다.
(1) app = wx.App()으로 App 클래스를 변수에 할당하고, (2) MainLoop() 함수로 이를 실행시켜주는 것이다.
wx.Frame
위에서 wx.App 클래스가 실제로 보이지는 않지만 wxPython GUI의 프로그램이 백그라운드에서 동작하도록 했다면, wx.Frame 클래스는 실제 사용자 눈에 보이는 부분을 담당한다. wx.Frame은 다른 말로 우리에게 익숙한 "윈도우"라고도 표현될 수 있는데, 말 그대로 사용자에게 보이는 윈도우 창을 정의하는 클래스이다. 기본 인수는 다음과 같다.
frame = wx.Frame(parent, id=wx.ID_ANY, title="창 제목", pos=wx.DefaultPosition,
size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, name="창 이름")
parent는 부모 클래스이고 없으면 None으로 해도 무방하다.
id의 경우 직접 할당해도 좋지만 wxPython에서는 id 자동할당기능이 있어 id=-1 혹은 id=wx.ID_ANY를 입력하면 임의로 아이디를 생성하여 할당한다. id는 wx 오브젝트를 식별할 수 있는 5자리 음의정수값이다.
title과 name은 사용자가 직접 정의한 String 값이다. title은 창의 제목이며 name은 사용자에게 표시되지는 않지만 프로그램 코드 내부에서 통용되는 오브젝트의 고유 이름을 정의한다.
pos는 스크린에서 창의 위치를 픽셀값으로 나타내며 pos=(100,100) 과 같이 (x,y) 좌표값을 할당해주면 된다. size는 프레임 크기로 pos과 같이 size=(600,400) 같은 형식으로 정의한다.
style은 윈도우 스타일을 의미하는데, 최대화, 최소화 버튼 및 닫기 버튼, 그리고 윈도우 창 크기 조절 가능 여부 등이 정의된다. style에 대해 고급 컨트롤을 하고싶다면 wxPython.org의 style링크(https://docs.wxpython.org/wx.Frame.html#styles-window-styles)를 참조한다.
위와 같이 프레임이 정의되면 이제 실제 사용자 눈에 보이도록 Show()를 실행해줘야 한다.
frame.Show()
이제 비로소 눈에 보이는 가장 간단한 wxPython 앱을 만들어 볼 차례다.
Hello World!
위에서 설명한 것을 요약하면 다음과 같다. 아래 네 단계가 바로 "눈에 보이는 wxPython 앱을 실행하기 위한 최소 요구조건"이다.
- wx.App() 인스턴스 생성
- wx.Frame() 인스턴스 생성
- wx.Frame.Show() 프레임 화면에 띄우기
- wx.App.MainLoop() 앱 실행
파이참(Pycharm)에 1~4를 그대로 써서 실행(Run)시켜보자.
import wx
# wx.App 인스턴스 생성
app = wx.App()
# 프레임 인스턴스 생성 (정의)
frame = wx.Frame(None, -1, title="Hello World!")
# 프레임 화면에 보이도록
frame.Show()
# app 실행
app.MainLoop()
import까지 포함하여 총 5 줄로 가장 간단한 wxPython GUI를 스크린에서 볼 수 있게 되었다.
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
'wxPython' 카테고리의 다른 글
파이썬 GUI, 싱글초이스다이얼로그 wx.SingleChoiceDialog (0) | 2023.02.22 |
---|---|
파이썬 GUI, 체크박스 생성 후 이벤트 연결하기 (0) | 2023.02.22 |
파이썬 GUI, 버튼 생성 후 이벤트 등록하기 (0) | 2023.02.12 |
파이썬 GUI, 메뉴바 만들기 wx.Menubar (0) | 2023.02.12 |
파이썬 GUI, 왜 wxPython 인가? (1) | 2023.02.11 |