为什么 mouseMoveEvent 在 PyQt5 中什么都不做 [英] Why mouseMoveEvent does nothing in PyQt5
本文介绍了为什么 mouseMoveEvent 在 PyQt5 中什么都不做的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试在 PyQt5 和 Python3.5 中使用 mouseMoveEvent 和 mousePressEvent,但是当我单击鼠标时没有任何反应.我的代码如下,有什么问题吗?
I try to use mouseMoveEvent and mousePressEvent in PyQt5 and Python3.5, but there is nothing when I click my mouse. My code is as following, is there something wrong?
from PyQt5 import QtWidgets, QtGui, QtCore
class Window(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
widget = QtWidgets.QWidget(self)
layout = QtWidgets.QVBoxLayout(widget)
self.graphicsView = QtWidgets.QGraphicsView()
self.graphicsView.setCursor(QtCore.Qt.CrossCursor)
self.graphicsView.setObjectName("graphicsView")
layout.addWidget(self.graphicsView)
self.setCentralWidget(widget)
def mouseMoveEvent(self, event):
if event.buttons() == QtCore.Qt.NoButton:
print("Simple mouse motion")
elif event.buttons() == QtCore.Qt.LeftButton:
print("Left click drag")
elif event.buttons() == QtCore.Qt.RightButton:
print("Right click drag")
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
print("Press!")
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())
推荐答案
首先,您必须启用 鼠标跟踪:
self.graphicsView.setMouseTracking(True)
然后你可以使用 QGraphicsView
的子类:
Then you can either use a subclass of QGraphicsView
:
class GraphicsView(QtWidgets.QGraphicsView):
def mouseMoveEvent(self, event):
if event.buttons() == QtCore.Qt.NoButton:
print("Simple mouse motion")
elif event.buttons() == QtCore.Qt.LeftButton:
print("Left click drag")
elif event.buttons() == QtCore.Qt.RightButton:
print("Right click drag")
super(GraphicsView, self).mouseMoveEvent(event)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
print("Press!")
super(GraphicsView, self).mousePressEvent(event)
或者安装一个事件过滤器:
Or install an event-filter:
self.graphicsView.viewport().installEventFilter(self)
...
def eventFilter(self, source, event):
if event.type() == QtCore.QEvent.MouseMove:
if event.buttons() == QtCore.Qt.NoButton:
print("Simple mouse motion")
elif event.buttons() == QtCore.Qt.LeftButton:
print("Left click drag")
elif event.buttons() == QtCore.Qt.RightButton:
print("Right click drag")
elif event.type() == QtCore.QEvent.MouseButtonPress:
if event.button() == QtCore.Qt.LeftButton:
print("Press!")
return super(Window, self).eventFilter(source, event)
这篇关于为什么 mouseMoveEvent 在 PyQt5 中什么都不做的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文