wxPython RibbonBarの使い方
情報がすごく少ないので、投稿
wxFormBuilder3.9.0から出力されたPythonソースコードには ## PLEASE DO *NOT* EDIT THIS FILE!
とか書いてあるが、残念ながら私の技能ではソース自体修正しないと全くうまく対応出来なかった。
- wxRibbonBarのwxExpandにチェックをつける
横幅がRibbonBarがアイコンの位置までしか表示されない事の対策
- ribbonButtonに適当にIDをつける
- RibbonButtonBarにイベントを追加(なんのイベントでもOK)
self.m_ribbonButtonBarMain.Bind( rb.EVT_RIBBONBUTTONBAR_CLICKED, self.click_ribbon_click )
の様にイベントをrb.EVT_RIBBONBUTTONBAR_CLICKEDにソースレベルで修正
- RibbonButtonBarのイベントハンドラrb.EVT_RIBBONBUTTONBAR_CLICKEDでボタンのIDを取得
ID毎にif文で分岐する。
buttonId = event.GetId()
# -*- coding: utf-8 -*- ########################################################################### ## Python code generated with wxFormBuilder (version Oct 26 2018) ## http://www.wxformbuilder.org/ ## ## PLEASE DO *NOT* EDIT THIS FILE! ########################################################################### import wx import wx.xrc import wx.lib.agw.ribbon as rb ID_RIBBON_NEW = 1000 ID_RIBBON_OPEN = 1001 ID_RIBBON_SAVE = 1002 ID_RIBBON_RUN = 1003 ########################################################################### ## Class TestFrame ########################################################################### class TestFrame ( wx.Frame ): def __init__( self, parent ): wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"My Tool", pos = wx.DefaultPosition, size = wx.Size( 601,468 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL ) self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) MainSizer = wx.BoxSizer( wx.VERTICAL ) self.m_ribbonBar = rb.RibbonBar( self , \ wx.ID_ANY, wx.DefaultPosition, wx.Size( -1,-1 ), wx.lib.agw.ribbon.RIBBON_BAR_DEFAULT_STYLE ) self.m_ribbonPageMain = rb.RibbonPage( \ self.m_ribbonBar, wx.ID_ANY, u"Main" , wx.NullBitmap , 0 ) self.m_ribbonBar.SetActivePage( self.m_ribbonPageMain ) self.m_ribbonPanelMain = rb.RibbonPanel( \ self.m_ribbonPageMain, wx.ID_ANY, u"Main" , wx.NullBitmap , wx.DefaultPosition, \ wx.DefaultSize, wx.lib.agw.ribbon.RIBBON_PANEL_DEFAULT_STYLE ) self.m_ribbonButtonBarMain = rb.RibbonButtonBar( \ self.m_ribbonPanelMain, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) self.m_ribbonButtonBarMain.AddSimpleButton( \ ID_RIBBON_NEW, u"New", wx.Bitmap( u"new.png", wx.BITMAP_TYPE_ANY ), wx.EmptyString) self.m_ribbonButtonBarMain.AddSimpleButton( \ ID_RIBBON_OPEN, u"Open", wx.Bitmap( u"open.png", wx.BITMAP_TYPE_ANY ), wx.EmptyString) self.m_ribbonButtonBarMain.AddSimpleButton( \ ID_RIBBON_SAVE, u"Save", wx.Bitmap( u"save.png", wx.BITMAP_TYPE_ANY ), wx.EmptyString) self.m_ribbonButtonBarMain.AddSimpleButton( \ ID_RIBBON_RUN, u"Run", wx.Bitmap( u"run.png", wx.BITMAP_TYPE_ANY ), wx.EmptyString) self.m_ribbonBar.Realize() MainSizer.Add( self.m_ribbonBar, 0, wx.ALL|wx.EXPAND, 5 ) self.SetSizer( MainSizer ) self.Layout() self.m_statusBar2 = self.CreateStatusBar( 1, wx.STB_SIZEGRIP, wx.ID_ANY ) self.Centre( wx.BOTH ) # Connect Events # self.m_ribbonButtonBarMain.Bind( wx.EVT_LEFT_DOWN, self.click_ribbon_click ) self.m_ribbonButtonBarMain.Bind( rb.EVT_RIBBONBUTTONBAR_CLICKED, self.click_ribbon_click ) def __del__( self ): pass # Virtual event handlers, overide them in your derived class def click_ribbon_click( self, event ): buttonId = event.GetId() print('*',buttonId ) if buttonId == ID_RIBBON_NEW : print('new') elif buttonId == ID_RIBBON_OPEN : print('open') elif buttonId == ID_RIBBON_SAVE : print('save') elif buttonId == ID_RIBBON_RUN : print('run') app = wx.App(False) frame = TestFrame(None) frame.Show(True) app.MainLoop()