Отображение текста при наведении курсора на кнопку в 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 2

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 в комментариях к этому вопросу.