如何覆盖 closeEvent 函数以使其正常工作

Posted

技术标签:

【中文标题】如何覆盖 closeEvent 函数以使其正常工作【英文标题】:How to do override closeEvent functions to make it working 【发布时间】:2021-04-03 15:00:49 【问题描述】:

我正在使用 pyside2 和 pyqt5 库来加载我的 UI 文件。

from PySide2 import QtWidgets
from PySide2.QtWidgets import QApplication
from PySide2.QtUiTools import QUiLoader

class A(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(A, self).__init__(parent)
        self.ui = QUiLoader().load('uiFile.ui')
    
    def closeEvent(self, event):
        event.ignore()


app = QApplication([])
mainWin = A()
mainWin.ui.show()
app.exec_()

在我看来,当我单击 X 按钮时它会显示“11111”。 但是,它根本不起作用。

here is the ui file

【问题讨论】:

您可以在使用operation_ui 类的地方添加代码吗? 您能否更新您的问题以包含最少的可重现代码?如果它没有运行,似乎有点难以猜测出了什么问题。 这些怎么样? 好多了,但是“uiFile.ui”的内容会有很大帮助。 你的代码中真的是print(11111111)吗?因为那是试图打印一个名为 11111111 的变量的值,而不是文字文本。应该是print('11111111') 【参考方案1】:

问题是“A”是一个不显示的小部件,它不是窗口,所以覆盖closeEvent没有意义。相反,您应该使用事件过滤器来监视窗口的事件。

from PySide2.QtCore import QEvent, QObject
from PySide2.QtWidgets import QApplication
from PySide2.QtUiTools import QUiLoader


class Manager(QObject):
    def __init__(self, ui, parent=None):
        super(Manager, self).__init__(parent)
        self._ui = ui

        self.ui.installEventFilter(self)

    @property
    def ui(self):
        return self._ui

    def eventFilter(self, obj, event):
        if obj is self.ui:
            if event.type() == QEvent.Close:
                event.ignore()
                return True
        super().eventFilter(obj, event)


def main():
    app = QApplication([])
    manager = Manager(QUiLoader().load("uiFile.ui"))
    manager.ui.show()
    app.exec_()


if __name__ == "__main__":
    main()

如果你想覆盖 .ui 中使用的 QMainWindow 的 closeEvent 方法,那么你必须提升它并将其注册为this other answer 显示。

【讨论】:

以上是关于如何覆盖 closeEvent 函数以使其正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Vue 3 Typescript 如何正确比较字符串以使其正常工作?

如何将 React 组件分离到不同的文件中以使其正常工作并避免 TypeErrors?

我应该如何覆盖 VideoView 的 onDraw 以使其具有透明的圆角?

如何更新 cupy/CUDA 以使其再次工作并修复我的 conda 环境?

我如何修复此代码以使其修剪尾随零和小数点

如何修复Code以使C#中的Fibonacci搜索算法正常 工作