2017-02-26 118 views
1

我需要继承一个Label小部件,以便浏览器可以在鼠标单击时打开链接。tkinter中的标签

这是我迄今为止所做的代码片段。

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() 

回答

2
  • 你应该申报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() 
+0

哇,非常感谢你,我知道了。哈哈 – Crabime