继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python进阶量化交易专栏场外篇24-详解wxPython之Toolbar的使用

袁霄
关注TA
已关注
手记 86
粉丝 1.8万
获赞 1569

欢迎大家订阅《教你用 Python 进阶量化交易》专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下:

为了将专栏中分散的知识点贯穿起来,笔者在专栏的末尾小节《制作自己的量化交易工具》中分享了早期制作的一个简易版量化交易小工具,希望大家能够通过调试代码的方式掌握相关的知识。

目前在场外篇第9篇中已经移植到了Python3.7x版本上,接下来我们在这个版本的基础上逐步完善这个工具,使专栏的读者不仅能够通过小工具掌握专栏的相关知识点,也能够把工具用到自己的股票量化交易中去。

本篇手记介绍下如何在量化小工具上添加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之类。

关于完整代码可加入专栏交流群获取。更多的量化交易内容欢迎大家订阅专栏阅读!!

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP

热门评论

已经购买专栏,请问怎么进楼上说的那个群呀?


你的新课啥时候发布啊

查看全部评论