2017-02-26 124 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