Отображение сообщения при наведении курсора мыши на что-либо в Python
У меня есть графический интерфейс, сделанный с TKinter в Python. Я хотел бы иметь возможность отображать сообщение, когда мой курсор мыши идет, например, поверх метки или кнопки. Цель этого-объяснить пользователю, что делает или представляет собой кнопка/метка.
есть ли способ отображения текста при наведении курсора на объект tkinter в Python?
2 ответов
вам нужно установить привязку на <Enter>
и <Leave>
событий.
Примечание: Если вы выбираете всплывающее окно (т. е. подсказку), убедитесь, что вы не всплываете непосредственно под мышью. Произойдет то, что это вызовет запуск события leave, потому что курсор покидает метку и входит во всплывающее окно. Затем ваш обработчик отпуска отклонит окно, ваш курсор введет метку, которая вызывает событие enter, которое всплывает в окне, которое вызывает событие leave, которое отклоняет окно, которое вызывает событие enter, ... до бесконечности.
вот пример, который просто обновляет метку, аналогичную строке состояния, которую используют некоторые приложения.
import Tkinter as tk
class Example(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.l1 = tk.Label(self, text="Hover over me")
self.l2 = tk.Label(self, text="", width=40)
self.l1.pack(side="top")
self.l2.pack(side="top", fill="x")
self.l1.bind("<Enter>", self.on_enter)
self.l1.bind("<Leave>", self.on_leave)
def on_enter(self, event):
self.l2.configure(text="Hello world")
def on_leave(self, enter):
self.l2.configure(text="")
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(side="top", fill="both", expand="true")
root.mainloop()
вы можете обратиться к этому- HoverClass
это именно то, что вам нужно. Ни больше, ни меньше!--5-->
from Tkinter import *
import re
class HoverInfo(Menu):
def __init__(self, parent, text, command=None):
self._com = command
Menu.__init__(self,parent, tearoff=0)
if not isinstance(text, str):
raise TypeError('Trying to initialise a Hover Menu with a non string type: ' + text.__class__.__name__)
toktext=re.split('\n', text)
for t in toktext:
self.add_command(label = t)
self._displayed=False
self.master.bind("<Enter>",self.Display )
self.master.bind("<Leave>",self.Remove )
def __del__(self):
self.master.unbind("<Enter>")
self.master.unbind("<Leave>")
def Display(self,event):
if not self._displayed:
self._displayed=True
self.post(event.x_root, event.y_root)
if self._com != None:
self.master.unbind_all("<Return>")
self.master.bind_all("<Return>", self.Click)
def Remove(self, event):
if self._displayed:
self._displayed=False
self.unpost()
if self._com != None:
self.unbind_all("<Return>")
def Click(self, event):
self._com()
пример приложения с помощью HoverInfo:
from Tkinter import *
from HoverInfo import HoverInfo
class MyApp(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.grid()
self.lbl = Label(self, text='testing')
self.lbl.grid()
self.hover = HoverInfo(self, 'while hovering press return \n for an exciting msg', self.HelloWorld)
def HelloWorld(self):
print('Hello World')
app = MyApp()
app.master.title('test')
app.mainloop()
скриншоты: