有没有办法从图像中返回实际的x,y坐标?
亲爱的Python专家们,
我用Python(Tkinter库)写了一个图形界面程序,这个程序可以显示一张图片。为了显示这张图片,我使用了Canvas这个组件。程序确实能加载一张图片(这张图片的宽度和高度总是比Canvas的宽度和高度要大),而且当我在Canvas上点击鼠标时,它会返回点击的x和y坐标(还有颜色的灰度值),但这些坐标总是Canvas上的坐标,而不是图片上的坐标。
举个例子,图片的尺寸是x=5040和y=3360,而Canvas的尺寸是x=500和y=400。当我在Canvas上点击时,无论我怎么滚动图片,我得到的x坐标永远不会超过500,y坐标也永远不会超过400。请问我哪里做错了,怎样才能从图片中获取正确的信息呢?
谢谢!
1 个回答
3
根据Canvas
的文档说明:
坐标系统
Canvas
这个小部件使用了两种坐标系统:一种是窗口坐标系统(左上角是(0, 0)),另一种是画布坐标系统,用来指定物品绘制的位置。通过滚动画布,你可以选择在窗口中显示画布坐标系统的哪个部分。scrollregion选项用于限制画布的滚动操作。要设置这个选项,通常可以使用类似下面的代码:
canvas.config(scrollregion=canvas.bbox(ALL))
def callback(event):
canvas = event.widget
x = canvas.canvasx(event.x)
y = canvas.canvasy(event.y)
print canvas.find_closest(x, y)
需要注意的是,这样得到的是画布坐标,而不一定和图像坐标相同——比如,如果你在画布中给图像留了边框,那么你需要手动调整这个偏差。