QGraphicsView的PyQt鼠标事件

瓦斯平托

我正在尝试从QGraphicsView获取各种鼠标事件的坐标,但是我不知道如何触发它们。最后,我想向graphicsView添加图片,然后在其上方绘制。

理想情况下,我希望坐标的原点位于左上角

0,0--------------------
|
|
|
|
|
|
|          

test.py

import sys
from PyQt4 import QtCore, QtGui, uic


class test(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = uic.loadUi('test.ui', self)

        self.connect(self.ui.graphicsView, QtCore.SIGNAL("mousePressEvent()"), self.mouse_pressed)
        self.connect(self.ui.graphicsView, QtCore.SIGNAL("mouseMoveEvent()"), self.mouse_moved)
        self.connect(self.ui.graphicsView, QtCore.SIGNAL("mouseReleaseEvent()"), self.mouse_released)

        self.ui.show()

    def mouse_pressed(self):
        p = QtGui.QCursor.pos()
        print "pressed here: " + p.x() + ", " + p.y()

    def mouse_moved(self):
        p = QtGui.QCursor.pos()
        print "moved here: " + p.x() + ", " + p.y()

    def mouse_released(self):
        p = QtGui.QCursor.pos()
        print "released here: " + p.x() + ", " + p.y()


def main():
    app = QtGui.QApplication(sys.argv)
    ui = test()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

test.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QGraphicsView" name="graphicsView"/>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>22</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

编辑:

这似乎可行。椭圆不再可移动,因为click事件似乎接管了。有任何想法吗?

import sys
from PyQt4 import QtCore, QtGui, uic


class graphicsScene(QtGui.QGraphicsScene):
    def __init__ (self, parent=None):
        super(graphicsScene, self).__init__ (parent)

    def mousePressEvent(self, event):
        position = QtCore.QPointF(event.scenePos())
        print "pressed here: " + str(position.x()) + ", " + str(position.y())
        self.update()

    def mouseMoveEvent(self, event):
        position = QtCore.QPointF(event.scenePos())
        print "moved here: " + str(position.x()) + ", " + str(position.y())
        self.update()

    def mouseReleaseEvent(self, event):
        position = QtCore.QPointF(event.scenePos())
        print "released here: " + str(position.x()) + ", " + str(position.y())
        self.update()


class test(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = uic.loadUi('test.ui', self)

        self.scene = graphicsScene()
        self.ui.graphicsView.setScene(self.scene)

        pen = QtGui.QPen(QtCore.Qt.red)
        brush = QtGui.QBrush(QtCore.Qt.blue)
        e = self.scene.addEllipse(10,10,100,100, pen, brush)
        e.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)

        self.ui.show()


def main():
    app = QtGui.QApplication(sys.argv)
    ui = test()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
帕维尔·斯特拉霍夫(Pavel Strakhov)

mousePressEvent其他方法不是插槽。您不能connect在这些方法上使用您需要在视图的上安装事件过滤器,viewport()并使用小部件的eventFilter方法捕获事件

请参阅事件过滤器

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

QGraphicsView如何接收鼠标移动事件?

来自分类Dev

如何识别 QGraphicsView 鼠标移动事件?

来自分类Dev

如何接收QGraphicsView的滚动条鼠标事件

来自分类Dev

PyQt:鼠标悬停和单击事件的Graphiccene椭圆

来自分类Dev

PyQt5中的鼠标悬停事件

来自分类Dev

如何使用 Pyqt 小部件创建键盘和鼠标事件

来自分类Dev

放大鼠标位置QGraphicsView

来自分类Dev

事件与鼠标事件

来自分类Dev

在QGraphicsView / QGraphicsScene上用鼠标移动项目

来自分类Dev

最初按下组合框时的QComboBox鼠标按下事件PyQt4

来自分类Dev

有什么方法可以使鼠标事件完全忽略PyQt5中的窗口?

来自分类Dev

尝试在 pyqt5 中的鼠标事件之间切换

来自分类Dev

QGraphicsView使用鼠标滚轮在鼠标位置下放大和缩小

来自分类Dev

QGraphicsView使用鼠标滚轮在鼠标位置下放大和缩小

来自分类Dev

在QgraphicsView内部拖放n无效(PyQt)

来自分类Dev

PyQt QGraphicsView 矩形外的暗区

来自分类Dev

Unity全局鼠标事件

来自分类Dev

鼠标事件在底层被忽略

来自分类Dev

鼠标右键事件

来自分类Dev

Java BounceBall鼠标事件

来自分类Dev

鼠标事件单击问题

来自分类Dev

鼠标事件:操作顺序

来自分类Dev

鼠标事件面临的问题

来自分类Dev

捕捉鼠标事件

来自分类Dev

Qt中的鼠标事件

来自分类Dev

使窗口对鼠标事件透明

来自分类Dev

鼠标悬停事件

来自分类Dev

鼠标事件运行多次

来自分类Dev

鼠标事件回调