我需要捕捉当用户将鼠标移动到GUI上时,而不是当他们按住鼠标按钮时(这会做一些不同的事情)。
我找不到任何方便的方法来做这个,除了定期找到鼠标的位置,并检查它的前一个位置.那就太糟了。
只有当鼠标左键被按下时,mouseMoveEvent才会被调用,除非小部件有“鼠标跟踪”。鼠标跟踪对我来说不是一个选项,因为当鼠标被移动,鼠标左键被按下时,GUI必须表现出不同的行为。
有什么内置的方法来做到这一点吗?(或者只是有什么聪明的想法?)
有办法检查鼠标左键是否在任何时候被按下了吗?
或者鼠标悬停事件可以应用于QRect (坐标)?
非常感谢。
Windows 7 (32)
python 2.7
PyQt4
发布于 2011-10-20 16:18:27
最简单的方法是在qApp上安装一个事件过滤器:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
widget = QtGui.QWidget(self)
layout = QtGui.QVBoxLayout(widget)
self.edit = QtGui.QLineEdit(self)
self.list = QtGui.QListWidget(self)
layout.addWidget(self.edit)
layout.addWidget(self.list)
self.setCentralWidget(widget)
def eventFilter(self, source, event):
if event.type() == QtCore.QEvent.MouseMove:
if event.buttons() == QtCore.Qt.NoButton:
pos = event.pos()
self.edit.setText('x: %d, y: %d' % (pos.x(), pos.y()))
else:
pass # do other stuff
return QtGui.QMainWindow.eventFilter(self, source, event)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
app.installEventFilter(win)
sys.exit(app.exec_())发布于 2015-03-26 23:28:16
正如人们所说,正确的方法似乎是在小部件上调用setMouseTracking(True)。我想补充的是,这样做后,您可以区分鼠标运动和鼠标拖动,如下所示:
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"发布于 2011-10-20 00:41:51
首先调用setMouseTracking(True)方法。然后mouseMoveEvent将在不按任何按钮的情况下被发射。
https://stackoverflow.com/questions/7829829
复制相似问题