股票

wx.StaticText/wx.TextCtrl实现超链接

wx.StaticText 静态文本,实现超链接是假的,它没有支持的事件类型,不具有任何可操作属性,最终实现的是用 wx.TextCtrl 实现,但是把它模拟成静态文本的样子,最终实现超链接。

先看模拟部分,就是在TextCtrl初始化的时候 style 添加 wx.TE_READONLY 和 wx.BORDER_NONE 属性,并且设置TextCtrl的背景色与框架背景色相同,这样 TextCtrl 在界面上显示和静态文本一模一样。

参考文章:python wx中 TextCtrl 实现与 StaticText 相似的显示效果

下一步,实现 TextCtrl的超链接功能。先看一下 TextCtrl 支持的事件类型:

—————————————————————–
EVT_TEXT:文本因用户的输入或在程序中使用SetValue()而被改变,都要产生该事件。
EVT_TEXT_ENTER:当用户在一个wx.TE_PROCESS_ENTER样式的文本控件中按下了回车键时,产生该事件。
EVT_TEXT_URL:如果在Windows系统上,wx.TE_RICH或wx.TE_RICH2样式被设置了,并且wx.TE_AUTO_URL样式也被设置了,那么当在文本控件内的URL上发生了一个鼠标事件时,该事件被触发。
EVT_TEXT_MAXLEN:如果使用SetMaxLength()指定了该控件的最大长度,那么当用户试图输入更长的字符串时,该事件被触发。例如,这时给用户显示一个警告消息。
—————————————————————–

注意我标红的 EVT_TEXT_URL 事件,“发生了一个鼠标事件时”,表明它是可以由鼠标点击触发的,不幸的是,鼠标移动到这里也会触发事件,所以当我做了就打开网页的实现后,一点开测试,瞬间打开了十几个网页。这时候,就需要在动作实现中添加鼠标判断函数:GetMouseEvent().LeftIsDown().即,当鼠标左键按下时才会执行超链接。同时,在初始化函数中添加 wx.TE_RICH和wx.TE_AUTO_URL样式,就可以实现StaticText的超链接功能了。

wx.StaticText/wx.TextCtrl实现超链接

附源码:

  1. class MyDialog(wx.Dialog):
  2.     def __init__(self,parent,text):
  3.         wx.Dialog.__init__(self,parent,-1,u”版本信息”,pos=wx.DefaultPosition, size=(500,300))
  4.         sizer = wx.GridSizer(rows=5,cols=1)
  5.         label_1 = wx.StaticText(self,-1,text)
  6.         label_1.SetFont(wx.Font(14,wx.DEFAULT,wx.NORMAL,wx.BOLD))
  7.         label_2 = wx.StaticText(self, -1, u”软件版本:V1.0 (2018.03.01)”)
  8.         label_2.SetFont(wx.Font(12,wx.DEFAULT,wx.NORMAL,wx.NORMAL))
  9.         label_3 = wx.StaticText(self, -1, u”版权所有:maydolly”)
  10.         label_3.SetFont(wx.Font(12,wx.DEFAULT,wx.NORMAL,wx.NORMAL))
  11.         label_4 = wx.TextCtrl(self, -1, u”联系作者:www.classnotes.cn”, size=(300,-1),
  12.                               style=wx.TE_READONLY|wx.TE_AUTO_URL|wx.TE_RICH|wx.BORDER_NONE)
  13.         label_4.SetFont(wx.Font(12,wx.DEFAULT,wx.NORMAL,wx.NORMAL))
  14.         label_4.SetBackgroundColour(self.BackgroundColour)
  15.         label_4.Bind(wx.EVT_TEXT_URL, self.OnButton)
  16.         self.number = 1
  17.         okbtn = wx.Button(self,wx.ID_OK,”OK”)
  18.         okbtn.SetDefault()
  19.         sizer.Add(label_1,flag=wx.ALIGN_CENTER)
  20.         sizer.Add(label_2,flag=wx.ALIGN_CENTER)
  21.         sizer.Add(label_3,flag=wx.ALIGN_CENTER)
  22.         sizer.Add(label_4,flag=wx.ALIGN_CENTER)
  23.         sizer.Add(okbtn, flag=wx.ALIGN_CENTER)
  24.         self.SetSizer(sizer)
  25.     def OnButton(self, evt):
  26.         if evt.GetMouseEvent().LeftIsDown():
  27.             webbrowser.open(“http://www.classnotes.cn”)
打赏
原文链接:,转发请注明来源!

发表评论