[英]Using Python Tkinter: Always on top window isn't showing custom class tooltip text
我无法获得工具提示与我总是在顶部窗口一起工作。 显然问题是你不能在总是排在最前面的东西之上创造一些东西; 所以我想知道是否有解决方法或解决方案。 Popup需要始终位于其他窗口之上,但我还需要正确显示所有工具提示。
这是我到目前为止的精简版:
from Tkinter import *
class GUI:
def __init__(self, root):
Popup = Toplevel(root)
Popup.resizable(0,0)
Popup.attributes("-toolwindow", 1)
Popup.wm_attributes("-topmost", 1)
PFrame = Frame(Popup)
self.B = Button(PFrame, width=10,height=10)
self.B.pack()
self.createToolTip(self.B,"Click this button.")
PFrame.pack()
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):
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() +15
y = y + cy + self.widget.winfo_rooty() +65
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)
label.pack(ipadx=1)
def hidetip(self):
tw = self.tipwindow
self.tipwindow = None
if tw: tw.destroy()
def createToolTip(self,widget,text):
toolTip = self.ToolTip(widget)
def enter(event): self.tt = root.after(1500,show,event)
def show(event): toolTip.showtip(text)
def leave(event):
if self.tt: root.after_cancel(self.tt)
toolTip.hidetip()
widget.bind('<Enter>', enter)
widget.bind('<Leave>', leave)
if __name__ == '__main__':
root = Tk()
App = GUI(root)
root.mainloop()
我通过将tw.wm_attributes("-topmost", 1)
到showtip
函数来修复它。 如果此解决方案不正确或有更好的方法,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.