Я - ре, разрабатывая часть моего текущего проекта программного обеспечения и хочу использовать гиперссылки вместо Buttons
. Я действительно не хотел использовать a Text
виджет, но это - все, что я мог найти, когда я погуглил предмет. Так или иначе я нашел пример этого, но продолжайте получать эту ошибку:
TclError: bitmap "blue" not defined
Когда я добавляю эту строку кода (использующий IDLE
)
hyperlink = tkHyperlinkManager.HyperlinkManager(text)
Код для модуля расположен здесь, и код для сценария расположен здесь
У кого-либо есть какие-либо идеи?
Часть, которая дает проблемы, говорит foreground="blue"
, который известен как цвет в Tkinter, не так ли?
Если вы не хотите использовать текстовый виджет, вам не нужно. Альтернативой является использование метки и привязка к ней щелчков мыши. Несмотря на то, что это ярлык, он все равно реагирует на события.
Например:
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()
Если хотите, вы можете пофантазировать и добавить дополнительные привязки для событий
и
, чтобы вы могли изменить внешний вид, когда пользователь зависает. И, конечно же, вы можете изменить шрифт, чтобы текст был подчеркнут, если хотите.
Tk - замечательный набор инструментов, который дает вам строительные блоки, чтобы делать все, что вы хотите. Вам просто нужно смотреть на виджеты не как на набор заранее подготовленных стен и дверей, а как на груду поясницы, кирпичей и раствора.
«синий»
действительно должен быть приемлемым (поскольку вы работаете в Windows, Tkinter должен использовать свою встроенную таблицу имен цветов - это может быть неправильная конфигурация системы в X11, но не в Windows); следовательно, это загадочная проблема (возможно, неправильная конфигурация Tkinter ...?). Что произойдет, если, например, вы используете foreground = "# 00F"
? Это не объясняет проблему, но может позволить вам ее обойти, по крайней мере ...