我用wxPython搭建GUI量化系统之wx.TextCtrl实现文本框

通常文本框是GUI中最常见的控件,不仅可以显示文本,还能收集用户使用键盘键入的文本内容。

在wxPython中文本框为wx.TextCtrl类,该类可以显示和编辑文本。
TextCtrl类的构造函数形式如下 :

wx.TextCtrl(self, parent=None, id=None, value=None, pos=None, size=None, style=0, validator=None, name=None):

接下来我们在量化小工具的显示区面板创建一个文本框,如下所示:

self.StockPanel = wx.Panel(self, -1)
self.BasicInput = wx.TextCtrl(self.StockPanel, -1, "股票基础信息数据:\n", style=wx.TE_MULTILINE | wx.TE_READONLY)  # 多行|只读

vboxnetB = wx.BoxSizer(wx.VERTICAL)#纵向box
vboxnetB.Add(self.BasicInput,proportion=1,flag=wx.EXPAND|wx.ALL,border=2)
self.StockPanel.SetSizer(vboxnetB)

self.HBoxPanel = wx.BoxSizer(wx.HORIZONTAL)
self.HBoxPanel.Add(self.ParaPanel,proportion = 1.5, border = 2,flag = wx.EXPAND|wx.ALL) 
self.HBoxPanel.Add(self.StockPanel,proportion = 8, border = 2,flag = wx.EXPAND|wx.ALL )
self.HBoxPanel.Add(self.CtrlPanel,proportion = 0.5, border = 2,flag = wx.EXPAND|wx.ALL )
self.HBoxPanel.Add(toolbar, proportion=0.5, border=2, flag=wx.EXPAND | wx.ALL)
self.SetSizer(self.HBoxPanel)

显示效果如下所示:

我用wxPython搭建GUI量化系统之wx.TextCtrl实现文本框_第1张图片

此处style为wx.TE_MULTILINE和wx.TE_READONLY,实际上style为接受样式参数,如下所示:

  • wx.TE_MULTILINE——文本控件允许多行。如果未指定该样式,换行字符不应该在控件值中使用。
  • wx.TE_PASSWORD——文本将回显为星号
  • wx.TE_READONLY——文本将不可编辑
  • wxTE_LEFT——在控件中的文本将左对齐(默认)
  • wxTE_CENTRE——在控件中的文本将居中对齐
  • wxTE_RIGHT——在控件中的文本将居右对齐
  • wx.TE_PROCESS_ENTER——如果使用了该样式,那么当用户在控件内按下回车键时,一个文本输入事件将被触发。

下一步我们在本文框对象self.BasicInput 中显示tushare获取到的股票基本信息列表,如下所示:

self.BasicInput.AppendText("序号  " + "TS代码  " + "股票代码  " + "股票名称  "+ "所在地域  " + "所属行业  "+ "上市日期  "+"\n")

for index, row in df_basic.iterrows():
    temp_str = str(index)+"  "
    for n in range(len(row)):
        temp_str += str(row[n])+"  "
    self.BasicInput.AppendText(temp_str+"\n")

显示效果如下所示:
我用wxPython搭建GUI量化系统之wx.TextCtrl实现文本框_第2张图片
此处显示文本使用了AppendText()方法,实际上wx.TextCtrl类还支持很多文本处理的方法,如下所示:

  • GetInsertionPoint():得到插入点的位置,位置是整型的索引值。控件的开始位置是0。
  • SetInsertionPoint(pos):设置插入点的位置
  • SetInsertionPointEnd():
  • GetRange(from, to):返回控件中位置索引范围内的字符串。
  • SetSelection(from, to):设置选择的文本
  • GetSelection():以元组的形式返回当前所选择的文本的起始位置的索引值(开始,结束)。
  • GetStringSelection()得到所选择的字符串。
  • GetValue():返回控件中所有的字符串
  • SetValue(value):SetValue()改变控件中的全部文本。
  • Remove(from, to):删除指定范围的文本。
  • Replace(from, to, value):用给定的值替换掉指定范围内的文本。这可以改变文本的长度。
  • WriteText(text):类似于AppendText(),只是写入的文本被放置在当前的插入点。

掌握了TextCtrl文本框的使用方法之后,可以相应地显示股票的财务数据、基本面数据、上市新股信息、新闻数据等等,辅助我们进行股票分析。于是我们可以使用相似的方法显示tushare获取到的快讯新闻数据,如下所示:

df_news = pro.news(src='sina', start_date='2020-01-20 09:00:00', end_date='2020-01-21 10:10:00')
self.BasicInput = wx.TextCtrl(self.StockPanel, -1, "股票快讯新闻数据:\n", style=wx.TE_MULTILINE | wx.TE_READONLY)  # 多行|只读
self.BasicInput.AppendText("事件  " + "新闻  "+"\n")

for index, row in df_news.iterrows():
    temp_str = str(row[0])+"  "+str(row[1])+"  "
    self.BasicInput.AppendText(temp_str+"\n")

显示效果如下所示:
我用wxPython搭建GUI量化系统之wx.TextCtrl实现文本框_第3张图片
也可以显示tushare获取到的新股上市列表数据,包括申购代码、上网发行日期、上市日期、发行总量(万股)、上网发行总量(万股)、发行价格、市盈率、个人申购上限(万股)、募集资金(亿元)、中签率等,如下所示:

df_share = pro.new_share(start_date='20180901', end_date='20200118')
self.BasicInput = wx.TextCtrl(self.StockPanel, -1, "IPO新股列表数据:\n", style=wx.TE_MULTILINE | wx.TE_READONLY)  # 多行|只读
self.BasicInput.AppendText("序号  "+"TS股票代码  "+"申购代码  "+"股票名称  "+"上网发行日期  " +
                           "上市日期  "+"发行总量(万股)  "+"上网发行总量(万股)  "+"发行价格  "+
                           "市盈率  "+"个人申购上限(万股)  "+"募集资金(亿元)  "+"中签率  "+"\n")
for index, row in df_share.iterrows():
    temp_str = str(index)+"  "
    for n in range(len(row)):
        temp_str += str(row[n])+"  "
    self.BasicInput.AppendText(temp_str+"\n")

显示效果如下所示:
我用wxPython搭建GUI量化系统之wx.TextCtrl实现文本框_第4张图片
另外,TextCtrl框中输入文字时可引发相应的事件,事件绑定器会负责处理相关事件,如下所示:

  • EVT_TEXT——文本因用户的输入或在程序中使用SetValue()而被改变,产生该事件
  • EVT_TEXT_ENTER——当用户在一个wx.TE_PROCESS_ENTER样式的文本控件中按下了回车键时,产生该事件
  • EVT_TEXT_MAXLEN——如果使用SetMaxLength()指定了该控件的最大长度,那么当用户试图输入更长的字符串时,该事件被触发

作者简介:

1-畅销书《Python股票量化交易从入门到实践》作者

我用wxPython搭建GUI量化系统之wx.TextCtrl实现文本框_第5张图片
2-日常运营公众号《元宵大师带你用Python量化交易》

3-CSDN视频课程《Python金融数据分析入门到实战》讲师

你可能感兴趣的:(我用wxPython搭建GUI量化系统之wx.TextCtrl实现文本框)