weixin_43265327 2021-08-20 22:47 采纳率: 66.7%
浏览 116
已结题

如何解决canvas加上滚动条后获取鼠标位置的问题

专家你好,我遇到一个棘手的问题,我在canvas上加了滚动条,需要输出鼠标位置,发现拖动滚动条后,输出的坐标不准确,是未拖动前的坐标,不知道怎么解决,请您帮忙,下面是代码


from tkinter import *

def locationx(event):#获取并输出鼠标的坐标
    lb_locationx.config(text=str(event.x)+' '+str(event.y))

root=Tk()
root.geometry('800x500')
frame=Frame(root)
frame.grid(row=0,column=0,rowspan=10)
hbar=Scrollbar(frame,orient=HORIZONTAL)
vbar=Scrollbar(frame,orient=VERTICAL)

cv=Canvas(frame,bg='khaki',width=400,height=300,xscrollcommand=hbar.set, yscrollcommand=vbar.set,scrollregion=(0,0,1200,1200))

hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=cv.xview)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=cv.yview)
cv.pack(side=LEFT,expand=True,fill=BOTH)

bt1=Button(root,text='画节点')
bt1.grid(row=0,column=1)

lb_locationx=Label(root)#输出鼠标所在位置
lb_locationx.grid(row=10,column=1,sticky=W)
lb_locationy=Label(root)
lb_locationy.grid(row=11,column=1,sticky=W)

cv.bind('<Motion>',locationx)#绑定获取位置的方法
root.mainloop()
  • 写回答

1条回答 默认 最新

  • Smart-Space 2021-08-21 10:41
    关注

    event.x返回的是鼠标相对于窗口的坐标,因此在画布中是不准确的。
    但是,canvas提供了两个函数:canvasxcanvasy函数。这两个函数都只接受一个参数,就是窗口坐标。这两个函数会将窗口坐标转化为画布中的坐标。
    希望能够帮助你。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月30日
  • 已采纳回答 8月22日
  • 修改了问题 8月20日
  • 创建了问题 8月20日

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记