2017-10-28 4 views
0

Ich entwickle ein Projekt mit Python und Tkinter, wobei Inhalt im Text Widget ändert sich dynamisch nach dem Programm.Nun in meinem Text-Widget habe ich viele urls.And hinzugefügt Nach dem Klicken auf sie Web-Browser sollte öffnen.Python tkinter: Browser öffnet sich automatisch, ohne auf den Text zu klicken

http://effbot.org/zone/tkinter-text-hyperlink.htm bezeichnen ich diese Hyperlinks in meinem code.But jetzt eröffnet mein Problem ist Browser zu erstellen, wenn URL auf dem Text-Widget angezeigt wird whithout sogar darauf klicken.

Hier ist mein Code.

def click1(self,url): 
    webbrowser.open(url) 

restitle,resthumb,resurl=printit()#title,thumbnailimage,url array 
while restitle: 
    raw_data = urllib.request.urlopen(resthumb[0]).read() 
    tim = PIL.Image.open(io.BytesIO(raw_data)) 
    tim = tim.resize((100, 100), PIL.Image.ANTIALIAS) 
    timage = ImageTk.PhotoImage(tim) 
    Lb1.image_create(END, image=timage) 
    curl=resurl[0] 
    Lb1.update() 
    images.append(timage) 
    Lb1.insert(END,restitle,hyperlink.add(click1(resurl[0])))#Passing url 
    Lb1.insert(END,"\n") 
    restitle.pop(0) 
    resurl.pop(0) 
    resthumb.pop(0) 

Meine Frage: Ich muß wissen, wie der Browser auf klicken einen bestimmten Text nur zu öffnen (Hyperlinks) und nicht, wenn sie den Text widget.I ist neu in Python hinzugefügt werden und tkinter Entschuldigung für etwaige Fehler im Code-Snippet.Thanks im Voraus.

+0

ist 'click1 'eine Methode einer Klasse? – PRMoureu

Antwort

1

Das Problem hier ist, dass Sie die Funktion nicht direkt an diese Methode hyperlink.add übergeben können, wird es ausgeführt, da Sie es mit einem Argument aufrufen. (Beachten Sie, dass wir im Beispiel Ihres Links nur die Referenz der Funktion übergeben, ohne sie aufzurufen).

Sie könnten einen Lambda-Ausdruck verwenden, wenn der Parameter gleich für alle Zeilen, aber die URL müssen jedes Mal ändern, so, Sie so etwas wie das partial Werkzeug verwenden müssen:

from functools import partial 

[...] 

Lb1.insert(END,restitle,hyperlink.add(partial(click1, resurl[0]))) 
+0

Vielen Dank für diese Idee. Es hat funktioniert. – krith

+0

Sie sind herzlich willkommen Krith – PRMoureu

Verwandte Themen