개요
툴바(wx.ToolBar)는 메뉴바(wx.MenuBar) 아래에 위치한 여러 개의 버튼으로 이루어진 wxPython 위젯이다.
wx.ToolBar
툴바(wx.ToolBar)는 여러 개의 툴베이스(wx.ToolBarToolBase)들로 이루어진다. 툴베이스란 툴바의 아이콘이라 생각하면 된다. 툴바에 아이콘이 4개 있으면 툴베이스가 4개 있는것과 같다.
따라서 이 경우 코드 선언도 툴바 1개에 툴베이스4개를 선언하면 하나의 툴바를 완성할 수 있다. 일반적으로 툴바는 아래와 같이 선언한다.
tb = wx.ToolBar(parent, id=ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize,
style=wx.TB_HORIZONTAL, name="")
위와 같이 ToolBar만 선언을 하면 단순히 툴바 객체만 생성이 된다. 툴바에는 아이콘들이 필요하므로 아래와 같이 툴베이스들을 하나씩 붙여준다. 툴바의 아이콘이 하나 늘어날 때마다 아래 툴베이스를 하나씩 선언해주면 된다.
toolbase = wx.AddTool(self, toolId, label, bitmap, bmpDisabled,
kind=wx.ITEM_NORMAL, shortHelp=””, longHelp=””, clientData=None)
toold: 툴베이스의 아이디
label: 텍스트로 표시될 툴베이스 레이블
bitmap: 툴베이스 아이콘 비트맵 이미지
bmpDisabled: 툴베이스를 Disable 시켰을때 나타나는 비트맵 이미지
kind: 툴베이스의 종류 (wx.ITEM_NORMAL=일반아이콘, wx.ITEM_CHECK=체크형식 등)
shortHelp: 툴팁에 보여지는 Help 문구. 아이콘에 마우스를 갖다대면 포인터 아래에 뜬다.
longHelp: 상태표시줄에 보여지는 Help 문구
clientData: 옵션사항. 클라이언트 데이터 포인터
여기까지 ToolBar에 AddTool 메소드를 이용하여 필요한 아이템들을 채워넣는 것을 알아보았다. ToolBar에 모든 아이템을 채워넣고 나면 반드시 아래와 같이 Realize() 메소드를 실행하는것을 잊지 말자. Realize() 메소드 없이는 툴바가 사용자에게 보이지 않는다.
tb.Realize()
예제
아래 예제는 네 개의 아이템으로 이루어진 툴바의 예시이다. 툴베이스 생성에 필요한 각 아이콘들은 플래티콘( https://www.flaticon.com/kr/ ) 에서 무료로 받을 수 있으니 참고하자.
import wx
class Example(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self,parent,id,'Example Window', size=(400,300))
# panel = wx.Panel(self, -1)
# 메뉴바 생성
self.CreateMenuBar()
# 툴 바 객체 생성
tb = wx.ToolBar(self, id=-1, style=wx.TB_HORIZONTAL|wx.TB_TEXT)
tb_dict = {'Copy':['copy.png', '복사'],
'Cut':['scissors.png', '잘라내기'],
'Paste':['paste.png', '붙여넣기'],
'Exit':['logout.png','종료']}
# 툴바에 툴버튼 생성
for key, value in tb_dict.items():
# AddTool 메소드가 인자를 Bitmap으로 받기 때문에 이미지를 Bitmap으로 변환 (wx.Bitmap) 시켜야 한다.
# 이미지 열기 -> png로 객체생성 -> 스케일조정 -> 비트맵 형식으로 변경의 네 단계이다.
bmp = wx.Bitmap(wx.Image("D:/icon/"+value[0], type=wx.BITMAP_TYPE_PNG).Rescale(13,13,wx.IMAGE_QUALITY_HIGH))
# 툴버튼 생성
toolbase = tb.AddTool(-1, key, bmp, shortHelp=value[1], kind=wx.ITEM_NORMAL)
# 툴바 생성 후 반드시 Realize()를 해줘야 화면에 뜬다.
tb.Realize()
# 툴바가 들어갈 박스사이저 생성
bsizer = wx.BoxSizer(wx.VERTICAL)
# 박스사이저에 툴바 할당
bsizer.Add(tb, 0, wx.EXPAND)
self.SetSizer(bsizer)
self.Center()
def CreateMenuBar(self):
# 메뉴바 생성
menubar = wx.MenuBar()
# File 메뉴 버튼과 그 하위 항목
file_menu = wx.Menu()
file_menu.Append(wx.ID_ANY, "Open...", '파일 열기') # 차례로 id / 메뉴항목 / 상태표시줄 텍스트
file_menu.Append(wx.ID_ANY, "Exit", '프로그램을 종료합니다.')
# Edit 메뉴 버튼과 그 하위 항목
edit_menu = wx.Menu()
edit_menu.Append(wx.ID_ANY, "Undo", '되돌리기')
edit_menu.Append(wx.ID_ANY, "Redo", '복구')
# 앞서 정의한 File 메뉴와 Edit 메뉴를 "메뉴바"에 붙인다.
menubar.Append(file_menu, "File")
menubar.Append(edit_menu, "Edit")
# 메뉴바를 "self" (=MenubarExampleFrame)에 세팅하고 사용자에게 보여준다.
self.SetMenuBar(menubar)
# 프레임 하단에 상태표시줄을 만든다.
status = self.CreateStatusBar()
if __name__=="__main__":
app = wx.App()
frame=Example(parent=None, id=-1)
frame.Show()
app.MainLoop()
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
'wxPython' 카테고리의 다른 글
파이썬 GUI, 로딩시 로고화면 넣기, 스플래시 스크린 Advanced Splash (0) | 2023.04.30 |
---|---|
파이썬 GUI, Aui툴바 AuiToolBar (0) | 2023.04.29 |
파이썬 GUI, 파일컨트롤 wx.FileCtrl (0) | 2023.03.26 |
파이썬 GUI, 팝업메뉴 PopupMenu (0) | 2023.03.24 |
파이썬 GUI, 파이비지인포 PyBusyInfo (0) | 2023.03.21 |