이번 강의는 메뉴바와 메뉴입니다.
1. 메뉴바
메뉴바는 메뉴들이 모여있는 장소라고 할 수 있습니다.
메뉴바가 있어야 메뉴들을 넣을 수 있기 때문에 메뉴를 넣으실 분들은 필수적으로 만드셔야 합니다.
메뉴바를 만드는 방법은 다음과 같습니다.
menu_bar = wx.MenuBar()
괄호 안에는 파라미터로 style값을 넣어줄 수 있지만, 메뉴를 분리할 때 말고는 쓰지 않습니다.
이제 메뉴바를 만들었으니 실행해 보겠습니다.
분명 메뉴바를 만들었는데 실제로는 메뉴바가 나타나지 않습니다. 이것은 메뉴가 없고, 메뉴바가 등록이 되지 않았기 때문입니다.
2. 메뉴
메뉴는 메뉴바를 구성하는 항목들입니다. 위 파이참 사진에서 메뉴는 File, Edit, View 등이 메뉴라고 할 수 있습니다.
메뉴를 만드는 방법은 메뉴바를 만드는 방법과 같습니다.
menu = wx.Menu()
메뉴 역시 메뉴바와 마찬가지로 style값을 파라미터로 줄 수 있지만, 자주 사용되지는 않습니다.
이제 메뉴를 만들었으니 메뉴바에 등록을 해야 합니다.
menu_bar.Append(menu, '메뉴')
Append함수는 두 가지 파라미터를 필요로 합니다.
- menu : 어떤 메뉴를 등록할지 지정. 반드시 메뉴를 먼저 선언한 후 사용
- title : 메뉴의 이름을 지정. 공란이 되어선 안됨
저는 menu라는 wx.Menu에 '메뉴'라는 이름을 달아주었습니다.
이제 마지막으로 메뉴바를 프레임에 등록해주면 끝입니다.
self.SetMenuBar(menu_bar)
이 함수로 menu_bar를 Mainframe의 메뉴바로 지정해줄 수 있습니다.
다시 실행결과를 확인해 보겠습니다.
이렇게 메뉴바가 포함된 프레임을 확인하실 수 있습니다.
2.1 하위 메뉴
프로그램에서 메뉴만 있는 경우도 있지만, 하위 메뉴가 있는 경우도 있습니다. 이러한 하위 메뉴를 만드는 방법은 다음과 같습니다.
menu.Append(101, '하위 메뉴')
하위 메뉴를 만드는 Append도 여러 가지 파라미터를 받을 수 있습니다.
- id : 하위 메뉴들의 고유한 id를 부여합니다. id는 위젯에 부여된 id와 동일하게 취급됩니다.
- item : 메뉴가 가지는 아이템을 설정합니다. 하위 메뉴의 이름을 지정하는 것과 같습니다.
- helpstring : 추가적으로 사용자에게 도움을 줄 수 있는 문장을 설정합니다. 기본적으로는 스테이터스 바에 표시됩니다.
- kind : 하위 메뉴의 종류를 설정합니다. 구분자, 기본, 체크, 라디오 버튼이 있습니다.
이제 이렇게 만들어진 하위 메뉴를 확인해 보겠습니다.
이렇게 하위 메뉴가 생성된 것을 볼 수 있습니다.
물론 하위 메뉴에도 이벤트를 연결할 수도 있습니다.
self.Bind(wx.EVT_MENU, self.ButtonClick, id=101)
하위 메뉴를 이전에 만들었던 "눌렀다!"를 출력하는 이벤트와 연결해 보았습니다.
그 이후부터는 하위 메뉴를 누를 때마다 해당 이벤트가 작동합니다.
3. 마치며
이번에는 메뉴바와 메뉴, 하위 메뉴에 대해서 알아보았습니다. 다음에는 다이얼로그에 대해서 알아보겠습니다.
import wx
class Mainframe(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(500, 500))
self.button = wx.Button(self, id=1, label='버튼')
self.Bind(wx.EVT_BUTTON, self.ButtonClick, id=1)
# self.Bind(wx.EVT_BUTTON, self.ButtonClick, self.button)
menu_bar = wx.MenuBar()
menu = wx.Menu()
menu_bar.Append(menu, '메뉴')
menu.Append(101, '하위 메뉴')
self.SetMenuBar(menu_bar)
self.Bind(wx.EVT_MENU, self.ButtonClick, id=101)
def ButtonClick(self, event):
print("눌렀다!")
def run():
app = wx.App()
frame = Mainframe(None, -1, 'Calculator')
frame.Show()
app.MainLoop()
run()
'파이썬 강의 > wx' 카테고리의 다른 글
파이썬 GUI(wxPython) 5. Sizer(레이아웃) : BoxSizer, StaticBoxSizer (0) | 2021.01.05 |
---|---|
파이썬 GUI(wxPython) 4. 다이얼로그 (0) | 2021.01.05 |
파이썬 GUI(wxPython) 2. 버튼과 버튼이벤트 (1) | 2021.01.04 |
파이썬 GUI(wxPython) 1. 기초(Frame과 실행) (2) | 2021.01.03 |
파이썬 GUI(wxPython) 0. 설치 (0) | 2021.01.02 |