PyQt - 向小部件添加右键单击

Rém*_*ian 6 python pyqt pyqt5

我正在使用 PyQt,我想向小部件添加右键单击,但我在网上找不到关于此主题的任何代码。

你怎么能这样做 ?

yur*_*snm 7

您只需要覆盖处理它的方法。

在这种情况下,您将覆盖 mousePressEvent,看看这个,看看它是否有意义并适合您的需要。

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


class MyWidget(QWidget):


    def __init__(self):
        super(MyWidget, self).__init__()

    def mousePressEvent(self, QMouseEvent):
        if QMouseEvent.button() == Qt.LeftButton:
            print("Left Button Clicked")
        elif QMouseEvent.button() == Qt.RightButton:
            #do what you want here
            print("Right Button Clicked")

if __name__ == "__main__":

    app = QApplication(sys.argv)
    mw = MyWidget()
    mw.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

另一个好方法是在你的对象中安装一个事件过滤器并覆盖它的 eventFilter。在该方法中,您可以制作您想要的东西。请记住,您始终可以将 pyqtSignal 用于良好实践并调用另一个对象来完成这项工作,而不是用大量逻辑重载该方法。

这是另一个小例子:

import sys

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

class MyWidget(QWidget):

    def __init__(self):
        super(MyWidget, self).__init__()
        self.installEventFilter(self)

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

if __name__ == "__main__":

    app = QApplication(sys.argv)
    mw = MyWidget()
    mw.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

注意:请记住,最后一个示例将接收所有类型的事件,因此您必须小心并确保它是您想要的,而不是运行时破坏您的应用程序调用不存在的事件方法,因为它不是那样的种类。例如,如果你打电话event.button()之前没有确定它是QEvent.MouseButtonPress你的应用程序当然会中断。

还有其他方法可以做到这一点,这些是最知名的方法。