wx.TextCtrl超链接实现demo

发布时间 2023-03-23 17:34:34作者: No九五二七9527

wx.TextCtrl超链接实现demo;

直接看代码,可以直接运行。

import wx
import webbrowser

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='wx.TextCtrl超链接实现demo', size=(300, 200))

        panel = wx.Panel(self)


        #注意这里的style决定超链接是否生效,wx.TE_AUTO_URL自动识别文本内容是否是web地址
        # 创建 TextCtrl 控件
        self.textCtrl = wx.TextCtrl(panel, -1,size=(250,-1),
                              style=wx.TE_READONLY|wx.TE_AUTO_URL|wx.TE_RICH|wx.BORDER_NONE)

        # 设置超链接属性
        attr = wx.TextAttr()
        attr.SetFontUnderlined(True)
        attr.SetTextColour(wx.BLUE)
        self.textCtrl.SetDefaultStyle(attr)



        # 在 TextCtrl 中添加超链接
        self.url = 'https://i.cnblogs.com/posts?cateId=2099344&pageSize=60'

        #这里注意,并非text这个表达式产生了超链接,主要是放入的self.url是一个web地址,
        #会被wx.TextCtrl控件的wx.TE_AUTO_URL自动识别到。
        text = 'Please click this link: {}'
        self.textCtrl.SetValue(text.format(self.url))

        # 绑定 EVT_TEXT_URL 事件
        #绑定触发事件,是点击超链接后是否跳转的关键
        self.Bind(wx.EVT_TEXT_URL, self.onLinkClicked, self.textCtrl)

        # 布局
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.textCtrl, 1, wx.EXPAND|wx.ALL, 10)
        panel.SetSizer(sizer)

    def onLinkClicked(self, event):

        #这里做了一个鼠标左键按下判断(不判断会出现鼠标指向超链接就疯狂跳转)
        state = wx.GetMouseState()
        if state.LeftIsDown():

            #这里用的是webbrowser的open()
            #也可以用os的os.startfile(url)达到同样的效果;
            webbrowser.open(self.url)

if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()