本文介绍下如何在量化小工具上添加wxPython的工具栏Toolbar。
工具栏包括文本文字说明或图标按钮的一个或多个水平条,通常被放置在MenuBar顶层帧的正下方。不同特征的工具按钮可以添加到工具栏。
wx.Toolbar类的创建如下所示:
wx.ToolBar(self, parent=None, id=None, pos=None, size=None, style=None, name=None)
其中style参数用于定义wx.ToolBar样式 ,该参数支持以下这些效果:
比如分别定义style参数为wx.TB_HORIZONTAL和wx.TB_VERTICAL的显示效果如下所示:
比如同时定义style参数为wx.TB_NOICONS和wx.TB_HORIZONTAL的代码和显示效果分别如下所示:
toolbar1 = wx.ToolBar(self, style=wx.TB_NOICONS|wx.HORIZONTAL)
比如同时定义style参数为wx.TB_TEXT和wx.TB_HORIZONTAL的代码和显示效果分别如下所示:
toolbar1 = wx.ToolBar(self, style=wx.TB_TEXT|wx.HORIZONTAL)
wx.ToolBar类提供了以下这些方法:
以下代码为使用AddTool()方法在ToolBar中添加按钮,如下所示,添加完成后需要调用Realize()才有效。
toolbar1 = wx.ToolBar(self, style = wx.TB_VERTICAL)
toolbar1.AddTool(wx.ID_ANY, u'回测', wx.Bitmap("tab_Back.png"))
toolbar1.AddTool(wx.ID_ANY, u'发现', wx.Bitmap("tab_Find.png"))
toolbar1.AddTool(wx.ID_ANY, u'行情', wx.Bitmap("tab_Price.png"))
toolbar1.AddTool(wx.ID_ANY, u'选股', wx.Bitmap("tab_Pick.png"))
toolbar1.AddTool(wx.ID_ANY, u'自选', wx.Bitmap("tab_Self.png"))
toolbar1.AddTool(wx.ID_ANY, u'交易', wx.Bitmap("tab_Trade.png"))
toolbar1.AddTool(wx.ID_ANY, u'资讯', wx.Bitmap("tab_Info.png"))
toolbar1.AddTool(wx.ID_ANY, u'财经', wx.Bitmap("tab_Finance.png"))
将AddRadioTool()替换AddTool()方法在ToolBar中添加按钮,显示的效果类似wx. CheckBox控件,代码和显示效果分别如下所示:
toolbar1 = wx.ToolBar(self, style=wx.TB_TEXT|wx.TB_DEFAULT_STYLE)
toolbar1.AddCheckTool(wx.ID_ANY, u'回测', wx.Bitmap("tab_Back.png"))
toolbar1.AddCheckTool(wx.ID_ANY, u'发现', wx.Bitmap("tab_Find.png"))
toolbar1.AddCheckTool(wx.ID_ANY, u'行情', wx.Bitmap("tab_Price.png"))
toolbar1.AddCheckTool(wx.ID_ANY, u'选股', wx.Bitmap("tab_Pick.png"))
toolbar1.AddCheckTool(wx.ID_ANY, u'自选', wx.Bitmap("tab_Self.png"))
toolbar1.AddCheckTool(wx.ID_ANY, u'交易', wx.Bitmap("tab_Trade.png"))
toolbar1.AddCheckTool(wx.ID_ANY, u'资讯', wx.Bitmap("tab_Info.png"))
toolbar1.AddCheckTool(wx.ID_ANY, u'财经', wx.Bitmap("tab_Finance.png"))
使用AddSeparator()可在ToolBar中添加一个分隔符,代码和显示效果分别如下所示:
当点击工具按钮后需要触发事件时,可以将事件绑定在ToolBar中,此处的事件类型为EVT_TOOL,如下所示:
toolbar1.Bind(wx.EVT_TOOL, self.OnEventTask)
由于ToolBar中有多个工具按钮,那么在事件程序中就需要通过判断按钮的ID号来区分当前所点击的按钮了,这个时候就不能使用wx.ID_ANY作为按钮的ID了,而是要指定的ID号。如下所示:
def OnEventTask(self,event):
print(str(event.GetId()))
if event.GetId() == 1100:# 回测按钮
pass
elif event.GetId() == 1101:
pass
elif event.GetId() == 1102:# 行情按钮
pass
elif event.GetId() == 1103:# 选股按钮
pass
elif event.GetId() == 1104:
pass
elif event.GetId() == 1105:
pass
elif event.GetId() == 1106:
pass
elif event.GetId() == 1106:
pass
else:
pass
需要注意的是,如果将其他控件添加到工具栏时,那么事件类型为该控件的事件,如wx.EVT_COMBOBOX之类。
作者简介:
1-畅销书《Python股票量化交易从入门到实践》作者
2-日常运营公众号《元宵大师带你用Python量化交易》
3-CSDN视频课程《Python金融数据分析入门到实战》讲师