2010-08-04 31 views
8

Sto progettando una parte del mio progetto software corrente e desidero utilizzare i collegamenti ipertestuali anziché Buttons. Non volevo davvero usare un widget Text, ma questo è tutto ciò che ho potuto trovare quando ho cercato su Google l'argomento. Ad ogni modo, ho trovato un esempio di questo, ma continuo a ricevere questo errore:Collegamento ipertestuale nel widget Testo Tkinter?

TclError: bitmap "blue" not defined 

Quando aggiungo questa riga di codice (utilizzando il IDLE)

hyperlink = tkHyperlinkManager.HyperlinkManager(text) 

Il codice per il modulo si trova here e il codice per lo script si trova here

Qualcuno ha qualche idea?

La parte che sta dando problemi dice foreground="blue", che è noto come colore in Tkinter, non è vero?

+0

"dare problemi"? come un traceback, forse? che cos'è? – msw

+0

Questo è l'errore esatto è [qui] (http://pastebin.com/JZMEGM1h)

Sembra che "blu" sia un bitmap. –

+0

Questo potrebbe essere leggermente irrilevante dal momento che si è su Windows. Ma l'ho provato su Ubuntu Linux, Python 2.6, e funziona senza alcun tipo di errore. Forse sono i tuoi problemi di installazione/configurazione? – avacariu

risposta

13

Se non vuoi usare un widget di testo, non è necessario. Un'alternativa è usare un'etichetta e associarvi i clic del mouse. Anche se è un'etichetta, risponde comunque agli eventi.

Ad esempio:

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

Se si desidera, è possibile ottenere fantasia e aggiungere altre associazioni per <Enter> e <Leave> eventi in modo da poter modificare l'aspetto quando l'utente si posiziona. E, naturalmente, puoi cambiare il carattere in modo che il testo sia sottolineato se lo desideri.

Tk è un meraviglioso kit di strumenti che ti dà le basi per fare praticamente quello che vuoi. Hai solo bisogno di guardare i widget non come un insieme di pareti e porte prefabbricate, ma più come un mucchio di lombari, mattoni e malta.

1

dovrebbe essere effettivamente accettabile (dato che sei su Windows, Tkinter dovrebbe usare la tabella dei nomi dei colori incorporata - potrebbe essere un errore di configurazione del sistema su X11, ma non su Windows); quindi, questo è un problema sconcertante (forse un misconfig di Tkinter ...?). Cosa succede se invece usi foreground="#00F", ad esempio? Questo non spiega il problema, ma potrebbe farti aggirare, almeno ...

+0

L'ho provato e ha ancora presentato lo stesso identico errore. –

+0

@Zachary, vuoi dire che stai dando '# 00F' ed è ** ancora ** che si lamenta di un' "blu" 'che non esiste più ??? O non è quello che intendi con "lo stesso identico errore"? –

+0

Probabilmente perché non sta cercando un colore ma un "bitmap" blu "non definito" come dichiari per primo. – msw

Problemi correlati