Отображение текста при наведении курсора на кнопку в python
Как отобразить текст в окне при наведении курсора на кнопку.
У меня ниже код, при наведении курсора на кнопку " Ok "он должен показывать текст как"проверить детали, заполненные перед нажатием Ok".
import Tkinter
class Example(Tkinter.Frame):
def __init__(self, *args, **kwargs):
Tkinter.Frame.__init__(self, *args, **kwargs)
self.l1 = Tkinter.Label(self, text="Enter name")
self.l2 = Tkinter.Label(self, text="", width=40)
self.l1.pack(side="top")
self.l2.pack(side="top", fill="x")
self.b1 = Tkinter.Button(root, text="Ok")
self.b1.bind("<Enter>", self.on_enter)
self.b1.bind("<Leave>", self.on_leave)
self.b1.pack()
def on_enter(self, event):
self.l2.configure(text="Check details filled before pressing Ok")
def on_leave(self, enter):
self.l2.configure(text="")
if __name__ == "__main__":
root = Tkinter.Tk()
Example(root).pack(side="top", fill="both", expand="true")
root.mainloop()
Тот же код прекрасно работает, если я пишу для отображения текста, когда курсор помещается над меткой l1. Есть ли какой-либо другой способ продолжить отображение при наведении курсора на кнопку или каких-либо изменениях??
2 ответа:
Если я правильно понял вопрос, вы хотите иметь возможность отображать различные сообщения, когда мышь находится над различными виджетами. Самое простое решение-добавить пользовательский атрибут к каждому объекту виджета, содержащему сообщение, а затем получить это сообщение из атрибута в связанной функции.
Например:
class Example(...): def __init__(...): ... self.l1.description = "This is label 1" self.l2.description = "This is label 2" self.b1.description = "This is the OK button" for widget in (self.l1, self.l2, self.b1): widget.bind("<Enter>", self.on_enter) widget.bind("<Leave>", self.on_leave) ... def on_enter(self, event): description = getattr(event.widget, "description", "") self.l2.configure(text=description)
Насколько мне известно, Tk не имеет встроенной конструкции для подсказок кнопок
В Qt (PyQt), который является еще одним графическим фреймворком, это встроенная функция - например:
button1 = QtGui.QPushButton("This is button1", self) button1.setToolTip("You have moused over Button1)
Есть некоторые обходные пути для добавления этого типа функциональности в Tk, но это может занять некоторое время, чтобы непосредственно реализовать их в вашей программе
По сути, вы создаете свой собственный класс ToolTip () и функцию в своем модуле, чтобы добавить новую ToolTip, addToolTip ()
Вот два рекомендации для этого: ref 1 ref 2
Edit: обратите внимание, что ref1 здесь является той же ссылкой, которая является принятым ответом на вопрос, на который ссылается Martineau в комментариях к этому вопросу.