PyQt5:右键单击关闭 window 也会将事件发送到下面的应用程序

PyQt5 : close window on right click sends the event to application underneath as well

我有这个应用程序,我试图在右键单击事件中关闭 window,尽管该事件有效并且我的 window 已关闭,但右键单击也会发送到应用程序出现在我的 python 应用程序下方,因此为该应用程序打开了一个上下文菜单(如果存在)。

例如,如果我的 python 应用程序下方有 windows 桌面屏幕,则会打开 windows 的上下文菜单。

这是我试过的

from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg
import sys

class MainWindow(qtw.QMainWindow): 
    
    def __init__(self, *arg, **kwargs):
        super().__init__(*arg, **kwargs)
        
        self.setWindowFlag(qtc.Qt.FramelessWindowHint)
        self.setAttribute(qtc.Qt.WA_TranslucentBackground)
        self.setGeometry(100, 100, 400, 300)
        self.showFullScreen()
        self.setAttribute(qtc.Qt.WA_NoMousePropagation)

        self.show()

    def paintEvent(self, event):
        qp = qtg.QPainter(self)
        qp.setPen(qtg.QPen(qtc.Qt.blue, 1))
        qp.drawRect(self.rect())
        
        qp.setOpacity(0.01)
        qp.setPen(qtc.Qt.NoPen)
        qp.setBrush(self.palette().window())
        qp.drawRect(self.rect())

    # close on right click
    def mousePressEvent(self, QMouseEvent):
        if QMouseEvent.button() == qtc.Qt.LeftButton:
            print("Left Button Clicked")
        elif QMouseEvent.button() == qtc.Qt.RightButton:
            self.close()

if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = MainWindow()
    sys.exit(app.exec_())

我试过使用WA_NoMousePropagation,但还是不行。

OS: Windows 10
PyQt5==5.15.6
PyQt5-Qt5==5.15.2
PyQt5-sip==12.9.0

鼠标右键单击时触发的事件中有 2 个是 OnMousePressOnMouseRelease。大多数桌面应用程序和桌面屏幕也会响应 OnMouseRelease 事件。因为我要在 mousePressEvent 上关闭 window。 window 已关闭,但释放事件已发送到 window 下的应用程序。因此,我们在应用程序下方看到了应用程序的上下文菜单。

关闭 mouseReleaseEvent 对我有用。

from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg
import sys

class MainWindow(qtw.QMainWindow): 
    
    def __init__(self, *arg, **kwargs):
        super().__init__(*arg, **kwargs)
        
        self.setWindowFlag(qtc.Qt.FramelessWindowHint)
        self.setAttribute(qtc.Qt.WA_TranslucentBackground)
        self.setGeometry(100, 100, 400, 300)
        self.showFullScreen()

        self.show()

    def paintEvent(self, event):
        qp = qtg.QPainter(self)
        qp.setPen(qtg.QPen(qtc.Qt.blue, 1))
        qp.drawRect(self.rect())
        
        qp.setOpacity(0.01)
        qp.setPen(qtc.Qt.NoPen)
        qp.setBrush(self.palette().window())
        qp.drawRect(self.rect())

    # close on right click
    def mouseReleaseEvent(self, QMouseEvent):
        if QMouseEvent.button() == qtc.Qt.RightButton:
            self.close()

if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = MainWindow()
    sys.exit(app.exec_())