설치하기
pip install wxPython
import wx
기본적으로 아래처럼 Frame을 바로 만들어서 사용해줄 수 있으나 클래스화 하여 만들어준다.
app = wx.App()
frame = wx.Frame(None, -1, 'Title')
frame.Show()
app.MainLoop()
크게 App() 으로 프레임을 넣어줄 화면을 지정하고 그 안에 Frame()으로 넣어줄 내용을 정의한다.
이때 wx.Frame 부분을 class 화 해주는 것이다.
메인 Frame 을 클래스화
class MainFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(350, 400))
클래스 안에 __init__ 메서드를 만들어서 wx.Frame.__init__() 처리를 해준다.
def openFrame():
app = wx.App()
frame = MainFrame(None, -1, 'Example')
frame.Bind( wx.EVT_LEFT_DOWN, ClickFrame )
frame.Show()
app.MainLoop()
openFrame()
프레임을 불러올 때마다 위 함수를 실행시켜주면 된다.
Frame 안에 메뉴바 넣어주기
wx.MenuBar() 를 사용하여 메뉴에 넣어줄 내용을 채워준다.
menu_bar = wx.MenuBar()
file = wx.Menu()
edit = wx.Menu()
help = wx.Menu()
menu_bar.Append(file, '&File')
menu_bar.Append(edit, '&Edit')
menu_bar.Append(help, '&help')
self.SetMenuBar(menu_bar)
# 메뉴바에 해당하는 하위 메뉴들을 아래처럼 설정해줄 수 있다.
file.Append(101, 'Example menu')
file.Append(102, 'Exit')
위 형태라면 이렇게 뜰 것이다.
Sizer 를 이용한 레이아웃 구성
레이아웃을 위해선 가장 큰 Frame 안에 Panel을 나눠주는 것이 좋다. 여기에 사용되는 여러 Sizer 들이 있는데, 나의 경우 큰 레이아웃으로는 BoxSizer()로 수평/수직 정렬처리를 한 다음
세부적인 레이아웃으로 작게 패널을 만들고 그 위치를 잡아준다.
panel = wx.Panel(self, -1)
panel.SetBackgroundColour('#ccc')
vBoxP = wx.BoxSizer(wx.VERTICAL)
topP = wx.Panel(panel, -1)
midP = wx.Panel(panel, -1)
bottomP = wx.Panel(panel, -1)
vBoxP.Add(topP, 1, wx.EXPAND|wx.ALL, 5)
vBoxP.Add(midP, 1, wx.EXPAND|wx.ALL, 5)
vBoxP.Add(bottomP, 1, wx.EXPAND|wx.ALL, 5)
panel.SetSizer(vBoxP)
self.Centre()
레이아웃 잡는 게 꽤 헷갈리는데 기본적으로 여러 Sizer를 겹치고 겹쳐서 위치를 잡아준 다음 wx.EXPAND나 wx.ALIGN 관련 값을 사용해준다. 자세한 사항은 공식 문서를 참고하는 것이 좋겠다.