首页 > 解决方案 > Tkinter - 获取标签对象的 x,y 坐标

问题描述

我已将Label对象定义为:

panel = Label(image_frame, image=self.img, cursor="cross")

现在,我想在此之上绘制多边形,并且我创建了一个draw()绑定到画布并允许我在其上绘制多边形的函数。所以,我知道我的draw()命令有效。

但是,我需要在我定义为标签的面板上执行此操作。我遇到的最大问题是我的draw()命令中的这一行

if event.widget.canvasx(event.x)-2 < orig_x < event.widget.canvasx(event.x)+2 and event.widget.canvasy(event.y)-2 < orig_y < event.widget.canvasy(event.y)+2 :

我正在产生以下错误:

AttributeError:“标签”对象没有属性“canvasx”

有对象的类比canvasxLabel?我怎样才能绕过这个而不改变Label?还是改用Label画布是我唯一的选择?

我能想到的唯一另一件事是在 后面有一个透明的画布Label,但是on-resize,事情变得一团糟。

标签: pythontkinter

解决方案


是否有用于 Label 对象的 canvasx 的模拟?如何在不更改标签的情况下绕过它?还是将标签更改为画布是我唯一的选择?

不,因为没有必要。canvasx存在是因为画布可以向任何方向滚动,并且您需要能够从小部件坐标转换为内部画布坐标。

在标签的情况下,如果您单击标签的 0,0 坐标,那将始终是标签的左上角,因为标签的内部无法滚动。


注意:不可能在画布上嵌入标签小部件(或任何其他小部件),然后在标签上绘制。官方画布文档对此进行了说明:

注意:由于窗口管理方式的限制,不能在窗口项之上绘制其他图形项(如线条和图像)。窗口项总是会遮盖与其重叠的任何图形,无论它们在显示列表中的顺序如何。


推荐阅读