為了賬號安全,請及時綁定郵箱和手機立即綁定

Python進階量化交易專欄場外篇24-詳解wxPython之Toolbar的使用

2020.03.22 19:23 263瀏覽

歡迎大家訂閱《教你用 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之類。

關于完整代碼可加入專欄交流群獲取。更多的量化交易內容歡迎大家訂閱專欄閱讀!!

點擊查看更多內容

本文首次發布于慕課網 ,轉載請注明出處,謝謝合作

1人點贊

若覺得本文不錯,就分享一下吧!

評論

相關文章推薦

正在加載中
意見反饋 幫助中心 APP下載
官方微信

舉報

0/150
提交
取消
TLC官网 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>