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

如何解决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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵