我将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
变得混乱了。
答案 0 :(得分:1)
是否有用于Label对象的canvasx的类似物?如何在不更改标签的情况下绕过它?还是将Label更改为画布是我唯一的选择?
否,因为没有必要。之所以canvasx
存在是因为画布可以在任何方向上滚动,并且您需要能够从小部件坐标转换为内部画布坐标。
在使用标签的情况下,如果单击标签的0,0坐标,则该位置将始终是标签的左上角,因为无法滚动标签的内部。
注意:不可能将标签小部件(或任何其他小部件)嵌入到画布上,然后在标签顶部绘制。官方的画布文档对此进行了说明:
注意:由于窗口管理方式的限制,无法在窗口项的顶部绘制其他图形项(例如线条和图像)。窗口项始终会遮盖与其重叠的所有图形,无论它们在显示列表中的顺序如何。