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

如何解决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函数。这两个函数都只接受一个参数,就是窗口坐标。这两个函数会将窗口坐标转化为画布中的坐标。
    希望能够帮助你。

    已采纳该答案
    1 打赏 评论

相关推荐 更多相似问题