2010-08-04 3 views
8

Ich entwarfe einen Teil meines aktuellen Softwareprojekts und möchte Hyperlinks anstelle von Buttons verwenden. Ich wollte wirklich kein Text Widget verwenden, aber das war alles, was ich finden konnte, als ich das Thema googelte. Wie dem auch sei, fand ich ein Beispiel dafür, aber halten Sie diesen Fehler:Hyperlink in Tkinter Text Widget?

TclError: bitmap "blue" not defined 

Wenn ich diese Zeile Code hinzufügen (mit dem IDLE)

hyperlink = tkHyperlinkManager.HyperlinkManager(text) 

Der Code für das Modul befindet sich here und der Code für das Skript befindet sich here

Wer haben irgendwelche Ideen?

Der Teil, der Probleme gibt, sagt foreground="blue", die als eine Farbe in Tkinter bekannt ist, nicht wahr?

+0

"Probleme geben"? Wie eine Rückverfolgung, vielleicht? Was ist es? – msw

+0

Dies ist der genaue Fehler ist [hier] (http://pastebin.com/JZMEGM1h)

Es scheint zu denken, dass "blau" eine Bitmap ist. –

+0

Dies kann etwas irrelevant sein, da Sie unter Windows sind. Aber ich habe dies unter Ubuntu Linux, Python 2.6, versucht und es funktioniert ohne irgendwelche Fehler. Vielleicht sind es Ihre Installations-/Konfigurationsprobleme? – avacariu

Antwort

13

Wenn Sie kein Text-Widget verwenden möchten, müssen Sie nicht. Eine Alternative besteht darin, ein Label zu verwenden und Mausklicks daran zu binden. Obwohl es ein Label ist, reagiert es immer noch auf Ereignisse.

Zum Beispiel:

import tkinter as tk 

class App: 
    def __init__(self, root): 
     self.root = root 
     for text in ("link1", "link2", "link3"): 
      link = tk.Label(text=text, foreground="#0000ff") 
      link.bind("<1>", lambda event, text=text: self.click_link(event, text)) 
      link.pack() 

    def click_link(self, event, text): 
     print("You clicked '%s'" % text) 

root = tk.Tk() 
app = App(root) 
root.mainloop() 

Wenn Sie möchten, können Sie Lust bekommen und zusätzliche Anbindungen für <Enter> und <Leave> Ereignisse hinzufügen, damit Sie das Aussehen verändern können, wenn der Benutzer schwebt. Und natürlich können Sie die Schriftart so ändern, dass der Text unterstrichen ist, wenn Sie dies wünschen.

Tk ist ein wunderbares Toolkit, das Ihnen die Bausteine ​​gibt, um genau das zu tun, was Sie wollen. Sie müssen die Widgets nicht nur als vorgefertigte Wände und Türen betrachten, sondern eher als Stapel von Lendenwirbeln, Ziegeln und Mörtel.

1

"blue" sollte in der Tat akzeptabel sein (da Sie unter Windows sind, sollte Tkinter seine eingebaute Farbnamen Tabelle verwenden - es könnte eine Systemfehlkonfiguration auf X11 sein, aber nicht auf Windows); Daher ist dies ein verwirrendes Problem (vielleicht ein Tkinter misconfig ...?). Was passiert, wenn Sie zum Beispiel foreground="#00F" verwenden? Dies erklärt das Problem nicht, aber möglicherweise können Sie es umgehen, zumindest ...

+0

Ich habe das versucht, und es zeigte immer noch genau den gleichen Fehler. –

+0

@Zachary, du meinst du gibst '# 00F' und es beschwert sich ** immer noch über ein' 'blue'' das gibt es nicht mehr ??? Oder meinen Sie das nicht mit genau dem gleichen Fehler? –

+0

Wahrscheinlich, weil es überhaupt nicht nach einer Farbe sucht, sondern nach einer "Bitmap" blau "nicht definiert", wie Sie zuerst sagen. – msw