【问题标题】:Is there way to return actual x,y-coordinates from the image?有没有办法从图像中返回实际的 x,y 坐标?
【发布时间】:2014-09-13 18:17:28
【问题描述】:

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

【问题讨论】:

  • 首先,您忘记显示代码了。

标签: python tkinter


【解决方案1】:

正如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 坐标相同 - 例如,如果您在画布内的图像周围留下边框,您必须手动更正。

【讨论】:

  • abarnert,你给了我一个很好的提示,告诉我如何解决这个问题,canvasx/canvasy 做的一切都是正确的。谢谢你,伙计;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
相关资源
最近更新 更多