2017-02-26 8 views
1

Labelウィジェットをサブクラス化する必要があります。ブラウザがマウスをクリックしている間にリンクを開くことができるようにします。subclass 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コンストラクタに渡す必要があります。
  • イベントハンドラは、使用していなくてもeventパラメータを持つ必要があります(発信者の視点からのroot)。それ以外の場合は、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