python - 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”
有对象的类比canvasx
吗Label
?我怎样才能绕过这个而不改变Label
?还是改用Label
画布是我唯一的选择?
我能想到的唯一另一件事是在 后面有一个透明的画布Label
,但是on-resize
,事情变得一团糟。
解决方案
是否有用于 Label 对象的 canvasx 的模拟?如何在不更改标签的情况下绕过它?还是将标签更改为画布是我唯一的选择?
不,因为没有必要。canvasx
存在是因为画布可以向任何方向滚动,并且您需要能够从小部件坐标转换为内部画布坐标。
在标签的情况下,如果您单击标签的 0,0 坐标,那将始终是标签的左上角,因为标签的内部无法滚动。
注意:不可能在画布上嵌入标签小部件(或任何其他小部件),然后在标签上绘制。官方画布文档对此进行了说明:
注意:由于窗口管理方式的限制,不能在窗口项之上绘制其他图形项(如线条和图像)。窗口项总是会遮盖与其重叠的任何图形,无论它们在显示列表中的顺序如何。
推荐阅读
- wordpress - 在单独的自定义页面和模板上获取 woocommce 属性
- c# - 使用 Windows.Devices.Bluetooth.GenericAttributeProfile 参考的问题
- java - 基于密码的 AES 加密和解密 - BadPaddingException
- architecture - DDD Hexagon - 在任何情况下,域层都应该与基础设施(DAL)层对话吗?
- node.js - 静态资源问题,无法访问公用文件夹nodejs
- swift - 如何在没有开销代码的情况下生成 GraphQL 文件?
- python - 如何在python中保存来自外部包的日志?
- c++ - ORACLE OTL V4.0 - 开始事务结束事务
- javascript - 量角器 - Chromium 89 - w3c 合规性和 browser.actions
- java - tika-app jar 的替代 jar 是什么?