我用wxPython搭建GUI量化系统之wx.Toolbar实现工具栏

本文介绍下如何在量化小工具上添加wxPython的工具栏Toolbar。

工具栏包括文本文字说明或图标按钮的一个或多个水平条,通常被放置在MenuBar顶层帧的正下方。不同特征的工具按钮可以添加到工具栏。

wx.Toolbar类的创建如下所示:

wx.ToolBar(self, parent=None, id=None, pos=None, size=None, style=None, name=None)

其中style参数用于定义wx.ToolBar样式 ,该参数支持以下这些效果:

  • wx.TB_FLAT提供该工具栏平面效果
  • wx.TB_HORIZONTAL指定水平布局(默认)
  • wx.TB_VERTICAL指定垂直布局
  • wx.TB_DEFAULT_STYLE结合wxTB_FLAT和wxTB_HORIZONTAL
  • wx.TB_DOCKABLE使工具栏浮动和可停靠
  • wx.TB_NO_TOOLTIPS当鼠标悬停在工具栏不显示简短帮助工具提示
  • wx.TB_NOICONS指定工具栏按钮没有图标,默认它们是显示的
  • wx.TB_TEXT显示在工具栏按钮上的文本;默认情况下,只有图标显示

比如分别定义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()添加工具按钮到工具栏。工具的类型是由各种参数指定的
  • AddRadioTool()添加属于按钮的互斥组按钮
  • AddCheckTool()添加一个切换按钮到工具栏
  • AddLabelTool()使用图标和标签来添加工具栏
  • AddSeparator()添加一个分隔符来表示工具按钮组
  • AddControl()添加任何控制工具栏。 例如,wx.Button,wx.Combobox等。
  • ClearTools()删除所有在工具栏的按钮
  • RemoveTool()从给出工具按钮移除工具栏
  • Realize()工具按钮增加调用

以下代码为使用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金融数据分析入门到实战》讲师

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页