Python - PyQT - 如何检测在图像中点击文本/点的鼠标事件

1 投票
1 回答
1524 浏览
提问于 2025-04-16 18:52

假设我在一个 QLabel 上绘制了一些简单的文字(比如字母 'x'),并设置了一些字体参数(比如字体大小为 20 等),然后把它放在一个 (x,y) 的位置上。为了在用户点击这个 'x' 的时候能够检测到鼠标事件,我需要重写哪些相关的方法呢?

我第一反应是查看已绘制点的存储 (x,y) 位置,如果鼠标当前位置在这个 (x,y) 位置周围的一个小框框里,那我就执行一些功能,比如允许用户调整这个点;如果不在这个框框里,就执行正常的鼠标事件功能。不过,我要处理的点是人脸上的特征,比如眼睛等。通常情况下,当有人以奇怪的角度对着摄像头时,两个不同的跟踪点可能会几乎重叠在一起。因此,无论用户多么专注于想要点击的关键点,如果在鼠标事件处理的逻辑标准中有一些容差,就会出现逻辑认为点击了两个不同点的情况。

我想尽量减少这种问题,但又不想让点击的标准变得过于苛刻。有没有什么根本不同的方法来理解文本的选择呢?比如,当文本被绘制到 pixmap 上时,是否会有某种属性让这个 pixmap 知道在 (x,y) 位置上绘制了文本,这样用户点击时就能知道他们是想点击这个文本呢?

如果有关于这方面的建议或 PyQT 的示例,我将非常感激。

1 个回答

0

虽然你在之前的问题中提到了用户交互的计划,但现在很明显,图形视图框架可能更适合你想要做的事情。

这和在一个小部件里绘图是完全不同的。使用这个框架,你可以创建一个场景,这个场景由多个图形元素(QGraphicsItem的子类)组成,然后把这个场景放到一个视图里。通过这个视图,你可以和场景里的元素进行互动。比如,你可以点击这些元素,甚至可以把它们拖动。虽然文档内容很多,看起来有点复杂,但从概念上来说,我觉得理解起来更简单。

撰写回答