mau*_*ius 14 python tkinter tooltip
我在Python中使用TKinter制作了一个GUI.我希望能够在鼠标光标移动时显示消息,例如,在标签或按钮的顶部.这样做的目的是向用户解释按钮/标签的作用或代表.
将鼠标悬停在Python中的tkinter对象上时,有没有办法显示文本?
Bry*_*ley 14
您需要在<Enter>和<Leave>事件上设置绑定.
注意:如果您选择弹出一个窗口(即:工具提示),请确保不要直接在鼠标下弹出它.会发生什么事情会导致离开事件,因为光标离开标签并进入弹出窗口.然后,您的离开处理程序将关闭该窗口,您的光标将进入标签,这会导致一个输入事件,该事件会弹出窗口,从而导致离开事件,该事件会关闭窗口,从而导致输入事件,...广告无穷.
这是一个仅更新标签的示例,类似于某些应用使用的状态栏.
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()
Run Code Online (Sandbox Code Playgroud)
squ*_*t17 12
我认为这可以满足您的要求。
输出如下所示:
首先,我创建了一个名为的类ToolTip,其中包含方法showtip和hidetip。
from tkinter import *
class ToolTip(object):
def __init__(self, widget):
self.widget = widget
self.tipwindow = None
self.id = None
self.x = self.y = 0
def showtip(self, text):
"Display text in tooltip window"
self.text = text
if self.tipwindow or not self.text:
return
x, y, cx, cy = self.widget.bbox("insert")
x = x + self.widget.winfo_rootx() + 57
y = y + cy + self.widget.winfo_rooty() +27
self.tipwindow = tw = Toplevel(self.widget)
tw.wm_overrideredirect(1)
tw.wm_geometry("+%d+%d" % (x, y))
label = Label(tw, text=self.text, justify=LEFT,
background="#ffffe0", relief=SOLID, borderwidth=1,
font=("tahoma", "8", "normal"))
label.pack(ipadx=1)
def hidetip(self):
tw = self.tipwindow
self.tipwindow = None
if tw:
tw.destroy()
def CreateToolTip(widget, text):
toolTip = ToolTip(widget)
def enter(event):
toolTip.showtip(text)
def leave(event):
toolTip.hidetip()
widget.bind('<Enter>', enter)
widget.bind('<Leave>', leave)
Run Code Online (Sandbox Code Playgroud)
小部件是您要添加提示的位置。例如,如果您希望在将鼠标悬停在按钮,条目或标签上时使用提示,则应在通话时提供提示的实例。
快速说明:上面的代码使用from tkinter import *
了某些程序员不建议使用的代码,它们具有有效的意义。在这种情况下,您可能需要进行必要的更改。
要将笔尖移动到所需位置,可以在x和y中进行更改。该功能CreateToolTip()有助于轻松创建该提示。只需将要显示在提示框中的小部件和字符串传递给此函数,就可以了。
这就是您称呼以上部分的方式:
button = Button(root, text = 'click mem')
button.pack()
CreateToolTip(button, text = 'Hello World\n'
'This is how tip looks like.'
'Best part is, it\'s not a menu.\n'
'Purely tipbox.')
Run Code Online (Sandbox Code Playgroud)
如果您将先前的大纲保存在其他python文件中,请不要忘记导入模块,也不要将文件另存为CreateToolTip或ToolTip以避免混淆。
Alo*_*lok 10
你可以参考这个 - HoverClass
这正是你所需要的.没有更多,没有更少
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()
Run Code Online (Sandbox Code Playgroud)
使用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()
Run Code Online (Sandbox Code Playgroud)
截图:
| 归档时间: |
|
| 查看次数: |
29194 次 |
| 最近记录: |