【发布时间】:2017-06-14 03:23:58
【问题描述】:
我尝试使用 Canvas 创建的红色圆圈或带有“X”的黄色标签来更改鼠标提示。
我使用了一个“where”函数,它捕获鼠标移动,并为我提供鼠标尖端的当前位置,因此将上述提示之一,即红色圆圈或黄色标签放置在 mounse 尖端位置。
我意识到,如果它们被放置在鼠标尖端,是不太理想的,因为它可以掩盖底层小部件,但让我们把它放在一边。
使用下面的代码,您会发现所选的提示与实际的鼠标提示有偏移,而我实际上将 then 放置在提示的右侧。那么为什么是偏移量呢?怎么了?
我也意识到放置意味着放置小部件的 nw 角。
此示例程序可以让您选择要玩的提示,方法是单击另一个提示,以切换到它。
因此,您可以看到,通过选择任一尖端形状,行为是相同的。
import tkinter as tk
def changetip(a): # change cursor tip, arg a is not used
global tipType
if tipType=="red" : tipType="yellow"
else: tipType="red"
def where(posn): #cursor tiop movement and colour change
cx=posn.x_root-w.winfo_x()
cy=posn.y_root-w.winfo_y()
if tipType=="red":
tipC.place(x=cx, y=cy)
tipL.place(x=300,y=300)
else:
tipC.place(x=400, y=400)
tipL.place(x=cx,y=cy)
w=tk.Tk()
w.geometry("500x500+100+100")
w.bind("<Motion>",where) #track mouse movement
tipType="red" # red is the canvas circle, yellow is label
# Make a cursor tip using a circle on canvas
tip_rad=10
tipC=tk.Canvas(w,width=tip_rad*2,height=tip_rad*2,highlightthickness=0,bg="green")
tip=tk.Canvas.create_oval(tipC,tip_rad/2,tip_rad/2,tip_rad/2*3,tip_rad/2*3, width=0, fill="red")
tipC.bind("<1>",changetip)
# Make a cursor tip using a label
tip_size=1
tipL=tk.Label(w,width=tip_size, height=tip_size,text="x",bg="yellow")
tipL.bind("<1>",changetip)
w.mainloop()
【问题讨论】:
标签: python canvas tkinter label mouseevent