tkin中的子类标签

2024-06-05 23:33:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要子类化一个Label小部件,这样浏览器就可以在鼠标单击链接时打开它。在

以下是我迄今为止所做工作的代码片段。在

from tkinter import *
import webbrowser

class HyperLinkLabel(Label):

    def __init__(self, link, *args, **kwargs):
        Label.__init__(self, *args, **kwargs)
        self.link = link
        self.bind("<Button-1>", self.click_callback)

    def click_callback(self):

        webbrowser.open_new(self.link)

if __name__ == '__main__':
    master = Tk()
    root = Frame(master)
    label1 = HyperLinkLabel(root, link='https://www.google.com')
    label1.config(text='hello')
    label1.pack()
    root.master.minsize(100, 50)
    root.mainloop()

Tags: importselfmasterinitdefcallbacklinkargs
1条回答
网友
1楼 · 发布于 2024-06-05 23:33:10
  • 您应该声明master(或父级)参数并将其传递给Label构造函数。(root从调用者的角度来看)
  • 事件句柄应该有event参数,即使您不使用它。否则将引发TypeError异常。在
  • 包装框架,使其内部的小部件可见。在

from tkinter import *
import webbrowser

class HyperLinkLabel(Label):
    def __init__(self, master, link, *args, **kwargs):  # <  pass master parameter
        Label.__init__(self, master, *args, **kwargs)   # <  pass master parameter
        self.link = link
        self.bind("<Button-1>", self.click_callback)

    def click_callback(self, event):  # < - missed event parameter
        webbrowser.open_new(self.link)

if __name__ == '__main__':
    master = Tk()
    root = Frame(master)
    label1 = HyperLinkLabel(root, link='https://www.google.com')
    label1.config(text='hello')
    label1.pack()
    root.pack()   # <  should pack frame; otherwise link widget is not visible
    root.master.minsize(100, 50)
    root.mainloop()

相关问题 更多 >