首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有PyQt4 MouseMove事件的MousePress

没有PyQt4 MouseMove事件的MousePress
EN

Stack Overflow用户
提问于 2011-10-20 00:31:23
回答 4查看 21.5K关注 0票数 10

我需要捕捉当用户将鼠标移动到GUI上时,而不是当他们按住鼠标按钮时(这会做一些不同的事情)。

我找不到任何方便的方法来做这个,除了定期找到鼠标的位置,并检查它的前一个位置.那就太糟了。

只有当鼠标左键被按下时,mouseMoveEvent才会被调用,除非小部件有“鼠标跟踪”。鼠标跟踪对我来说不是一个选项,因为当鼠标被移动,鼠标左键被按下时,GUI必须表现出不同的行为。

有什么内置的方法来做到这一点吗?(或者只是有什么聪明的想法?)

有办法检查鼠标左键是否在任何时候被按下了吗?

或者鼠标悬停事件可以应用于QRect (坐标)?

非常感谢。

Windows 7 (32)

python 2.7

PyQt4

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-20 16:18:27

最简单的方法是在qApp上安装一个事件过滤器:

代码语言:javascript
复制
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_())
票数 9
EN

Stack Overflow用户

发布于 2015-03-26 23:28:16

正如人们所说,正确的方法似乎是在小部件上调用setMouseTracking(True)。我想补充的是,这样做后,您可以区分鼠标运动和鼠标拖动,如下所示:

代码语言:javascript
复制
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"
票数 3
EN

Stack Overflow用户

发布于 2011-10-20 00:41:51

首先调用setMouseTracking(True)方法。然后mouseMoveEvent将在不按任何按钮的情况下被发射。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7829829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档