Tkinter-获取标签对象的x,y坐标

时间:2019-05-12 22:55:26

标签: python tkinter

我将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”

canvasx对象是否有Label的类似物?如何在不更改Label的情况下绕过它?还是要更改Label来画布我唯一的选择?

我唯一想到的另一件事是在Label后面有一块透明的画布,但随后on-resize变得混乱了。

1 个答案:

答案 0 :(得分:1)

  

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

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

在使用标签的情况下,如果单击标签的0,0坐标,则该位置将始终是标签的左上角,因为无法滚动标签的内部。


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

  

注意:由于窗口管理方式的限制,无法在窗口项的顶部绘制其他图形项(例如线条和图像)。窗口项始终会遮盖与其重叠的所有图形,无论它们在显示列表中的顺序如何。