如何在 PyQt6 中检查 MouseButtonPress 事件? [英] How to check MouseButtonPress event in PyQt6?

查看:49
本文介绍了如何在 PyQt6 中检查 MouseButtonPress 事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 PyQt5 中,我们可以使用 QEvent 类验证事件发生,例如 QEvent.MouseButtonPress.在 PyQt6 中,该语句不再有效.我已经检查了 PyQt6.QtCore.QEventPyQt6.QtGui.QMouseEvent 类的成员,我似乎无法找到包含MouseButtonPress 事件值.

In PyQt5, we can validate an event occurrence using QEvent class, for example QEvent.MouseButtonPress. In PyQt6 the statement is no longer valid. I have checked the members of both PyQt6.QtCore.QEvent and PyQt6.QtGui.QMouseEvent classes, I don't seem to be able to locate the correct Enum class containing the MouseButtonPress event value.

PyQt5 示例我正在尝试将其转换为 PyQt6

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import QEvent, Qt

class AppDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(800, 400)
        self.installEventFilter(self)
        
    def eventFilter(self, QObject, event):
        if event.type() == QEvent.MouseButtonPress: # <-- No longer work in PyQt6
            if event.button() == Qt.RightButton: # <-- Becomes event.button() == Qt.MouseButtons.RightButton
                print('Right button clicked')           

        return True

if __name__ == '__main__':
    app = QApplication(sys.argv)

    demo = AppDemo()
    demo.show()

    try:
        sys.exit(app.exec_())
    except SystemExit:
        print('Closing Window...')

更新:如果我打印 QEvent 和 QMouseEvent 的成员,这是所有成员都可用.

Updated: If I print the members of both QEvent and QMouseEvent, this is all the members are available.

print('Members of PyQt6.QtCore.QEvent')
print(dir(QEvent))
print('-'*50)
print('Members of PyQt6.QtCore.QMouseEvent')
print(dir(QMouseEvent))

>>>
Members of PyQt6.QtCore.QEvent
['Type', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'accept', 'clone', 'ignore', 'isAccepted', 'isInputEvent', 'isPointerEvent', 'isSinglePointEvent', 'registerEventType', 'setAccepted', 'spontaneous', 'type']
--------------------------------------------------
Members of PyQt6.QtCore.QMouseEvent
['Type', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'accept', 'allPointsAccepted', 'button', 'buttons', 'clone', 'device', 'deviceType', 'exclusivePointGrabber', 'globalPosition', 'ignore', 'isAccepted', 'isBeginEvent', 'isEndEvent', 'isInputEvent', 'isPointerEvent', 'isSinglePointEvent', 'isUpdateEvent', 'modifiers', 'point', 'pointById', 'pointCount', 'pointerType', 'pointingDevice', 'points', 'position', 'registerEventType', 'scenePosition', 'setAccepted', 'setExclusivePointGrabber', 'spontaneous', 'timestamp', 'type']

推荐答案

PyQt6 枚举使用 python 枚举的主要变化之一,因此您必须使用枚举名称作为中介,在您的情况下 MouseButtonPress 属于 Type 枚举和 RightButton为 MouseButtons,因此您必须将其更改为:

One of the main changes that PyQt6 enums use python enums so you must use the enumeration name as an intermediary, in your case MouseButtonPress belongs to the Type enum and RightButton to MouseButtons so you must change it to:

def eventFilter(self, QObject, event):
    if event.type() == QEvent.Type.MouseButtonPress:
        if event.button() == Qt.MouseButtons.RightButton:
            print("Right button clicked")

    return True

这篇关于如何在 PyQt6 中检查 MouseButtonPress 事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆