2010-08-04 44 views
8

Estoy volviendo a diseñar una parte de mi proyecto de software actual y quiero usar los hipervínculos en lugar de Buttons. Realmente no quería usar un widget Text, pero eso es todo lo que pude encontrar cuando busqué en Google el tema. De todos modos, me encontré con un ejemplo de esto, pero sigo recibiendo este error:¿Hipervínculo en el widget Tkinter Text?

TclError: bitmap "blue" not defined 

Al agregar esta línea de código (usando el IDLE)

hyperlink = tkHyperlinkManager.HyperlinkManager(text) 

El código para el módulo se encuentra here y el código para el script se encuentra here

¿Alguien tiene alguna idea?

La parte que está dando problemas dice foreground="blue", que se conoce como un color en Tkinter, ¿no es así?

+0

"dando problemas"? como un rastreo, tal vez? ¿Qué es? – msw

+0

Este es el error exacto es [aquí] (http://pastebin.com/JZMEGM1h)

Parece que piensa que "azul" es un mapa de bits. –

+0

Esto puede ser ligeramente irrelevante ya que estás en Windows. Pero probé esto en Ubuntu Linux, Python 2.6, y funciona sin ningún tipo de error. ¿Tal vez sean tus problemas de instalación/configuración? – avacariu

Respuesta

13

Si no desea utilizar un widget de texto, no es necesario. Una alternativa es usar una etiqueta y unir los clics del mouse a ella. A pesar de que es una etiqueta, todavía responde a los eventos.

Por ejemplo:

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

Si lo desea, puede conseguir la suposición y añadir fijaciones adicionales para <Enter> y <Leave> eventos para que pueda alterar la mirada cuando el usuario se desplaza. Y, por supuesto, puede cambiar la fuente para que el texto esté subrayado si así lo desea.

Tk es un maravilloso conjunto de herramientas que le ofrece los elementos básicos para hacer casi cualquier cosa que desee. Solo tiene que mirar los widgets no como un conjunto de paredes y puertas prefabricadas, sino más bien como una pila de lumbares, ladrillos y mortero.

1

"blue" debería ser aceptable (ya que está en Windows, Tkinter debería usar su tabla de nombres de colores incorporada; podría ser una configuración incorrecta del sistema en X11, pero no en Windows); por lo tanto, este es un problema desconcertante (¿quizás un error de configuración de Tkinter ...?). ¿Qué ocurre si usa foreground="#00F" en su lugar, por ejemplo? Esto no explica el problema, pero podría permitirle solucionarlo, al menos ...

+0

Intenté eso, y todavía presentaba exactamente el mismo error. –

+0

@Zachary, ¿quiere decir que está dando '# 00F' y está ** todavía ** quejándose de un' "azul" 'que ya no existe ??? ¿O no es eso lo que quiere decir con "el mismo error exacto"? –

+0

Probablemente porque no está buscando un color en absoluto, sino un "mapa de bits" azul "no definido" como usted dice primero. – msw

Cuestiones relacionadas