有没有办法从图像中返回实际的x,y坐标?

时间:2014-07-22 19:03:49

标签: python tkinter

亲爱的py专家。 我在python(Tkinter库)中编写了一个显示图片的GUI程序,以显示我使用Canvas小部件的图像。该程序确实加载了一张图片(其宽度/高度始终大于Canvas宽度/高度),当我在Canvas上点击鼠标时,它返回ax,y坐标(和颜色灰度值),但它始终是Canvas的坐标,而不是图像。例如 - 图像大小是x = 5040和y = 3360,Canvas小部件大小是x = 500和y = 400当我点击Canvas时我永远不会得到值,即使我滚动图像,X-超过500轴和400分别为Y轴。我做错了什么,如何从图像中获取正确的信息? 日Thnx。

1 个答案:

答案 0 :(得分:2)

正如Canvas上的文档解释:

  

协调系统

     

Canvas 小部件使用两个坐标系;窗口坐标系(左上角有(0,0)),以及指定项目绘制位置的画布坐标系。通过滚动画布,您可以指定要在窗口中显示的画布坐标系的哪个部分。

     

scrollregion 选项用于限制画布的滚动操作。要设置此项,您通常可以使用以下内容:

canvas.config(scrollregion=canvas.bbox(ALL))
  

要从窗口坐标转换为画布坐标,请使用canvasxcanvasy方法:

def callback(event):
    canvas = event.widget
    x = canvas.canvasx(event.x)
    y = canvas.canvasy(event.y)
    print canvas.find_closest(x, y)

请注意,这将为您提供 canvas 坐标,这些坐标不一定与 image 坐标相同 - 例如,如果您在画布中留下图像周围的边框,你必须手动纠正。