如何检测鼠标点击在pyside中绘制的椭圆?
Posted
技术标签:
【中文标题】如何检测鼠标点击在pyside中绘制的椭圆?【英文标题】:How to detect mouse click on ellipse drawn in pyside? 【发布时间】:2014-05-25 14:35:27 【问题描述】:我在QWidget
中使用QPainter
在黑色背景上绘制一堆椭圆,如下所示:
paint = QPainter()
paint.begin(self)
paint.setBrush(Qt.black)
paint.drawRect(event.rect())
brush = ...
paint.setBrush(brush)
paint.drawEllipse(center, rad, rad)
在绘制了一堆椭圆之后,然后我想检测鼠标点击这样一个现有的椭圆。我在 QPainter
的文档中没有发现任何明显的内容。
如果要使用其他东西来代替QPainter
,请提供一个示例来显示我在其他框架中的上述示例。
【问题讨论】:
你的意思是这段代码被放入了paintEvent或类似的东西?你能不能在鼠标点击事件中设置一个布尔变量,这反过来又调用小部件上的更新,这将触发相应的事件运行,它将检查布尔变量,如果它被设置,它将绘制椭圆?听起来怎么样? 我希望以任何方式绘制椭圆。独立于鼠标点击。但是当我点击其中一个椭圆时,我希望调用一个方法。 好的,我明白了,但我不明白你为什么在最后发布另一个问题。这似乎与主要问题无关。另外,您在classses
中有错字。
我已经更新并澄清了问题
【参考方案1】:
您需要自己检测自定义区域,如下所示:
def mousePressEvent(self, event):
''' You will have to implement the contain algorithm yourself'''
if sel.fo(even.pos()):
self.myMethod()
QGraphicsEllipseItem.contains()
或者,您可以查看QGraphicsEllipseItem
,因为它有contains-logic implemented and offered。
def mousePressEvent(self, event):
if self.contains(event.pos()):
self.myMethod()
然后你用相应的参数创建你的对象:
scene = QGraphicsScene()
ellipseItem = MyGraphicsEllipseItem(centerx, centery, rad, rad)
scene.addItem(ellipseItem)
view = QGraphicsView(scene)
view.show()
scene.setBackgroundBrush(Qt.black)
【讨论】:
但是我应该如何使用这个QGraphicsElliseItem
?文档说将其添加到QGraphicsScene
。如何将QGraphicsScene
添加到我的实际主要QWidget
?我可以直接这样做吗?还是我需要将其添加到其他内容中?我需要一个示例代码!
@Alex:你是 Qt 新手,是吗? QGraphicsView 是一个与 QWidgets 完全不同的框架。无论哪种方式,您都可以这样做;你甚至可以做 QML,但实际上,如果你想坚持使用 QWidgets,你必须自己实现这个,抱歉。就是这样,句号。克服它并做事。
是的,我是 Qt 新手(而且经常完全糊涂),我不知道这些是不同的框架。我可以尝试使用这个其他框架。其中,QGraphicsView
是否对应于QWidget
?他们有类似的方法吗?你能不能提供一个简单的示例代码模板,让我看看原则上怎么做?
@Alex: qt-project.org/doc/qt-5/graphicsview.html 但实际上,你应该对这个主题有更多的了解,而不是进一步问这么广泛的问题。
很抱歉因为我缺乏知识而为您设置。如果你对人们提出的有效问题有疑问——也许你应该做点别的。现在我可以运行一个简单的例子来绘制一个简单的圆圈。到现在为止还挺好。但是我的代码能够定义一个画笔来填充圆圈 - 在黑色背景上!我知道这对QPainter
是如何工作的 - 但对于不同的框架,我必须从头开始才能看到我的画笔适合的位置。但请不要担心:我不会问如何做到这一点,我会花下一个几个小时或几天才能自己弄清楚!以上是关于如何检测鼠标点击在pyside中绘制的椭圆?的主要内容,如果未能解决你的问题,请参考以下文章