python qwidget closeEvent 没有调用

python qwidget closeEvent doesn't call

我使用设计器创建了表单。 所以,我有 3 个文件:

1. Form.py: - 从设计器自动创建 ..... bla-bla-bla ...... class Ui_Form(object): def setupUi(self, Form): Form.setObjectName(_fromUtf8("Form")) Form.resize(1920, 1000) Form.setMaximumSize(QtCore.QSize(1920, 1000)) ..... bla-bla-bla ......

2。 FormProc.py: - 为处理而创建的手册

from Form import *

class FormProc(Ui_Form):

    def setupUi(self, Form):
        Ui_Form.setupUi(self, Form)
  ..... bla-bla-bla ......

3。 Main.py: - 主文件

import sys
from FormProc import *

def main():
    app = QtGui.QApplication(sys.argv)

    MainWindow = QtGui.QWidget()
    mw=FormProc()
    mw.setupUi(MainWindow)
    MainWindow.show()

    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我需要捕捉 closeEvent,但我不能。在 FormProc.py 中定义 closeEvent 函数不起作用。

如果您查看 Form.py 中的 class 定义,您会发现它只是一个继承自 [=12= 的简单命名空间]. setupUi 方法创建所有在 Qt Deisgner 中指定的小部件,并使它们成为该命名空间的属性。唯一的例外是顶级小部件,它必须作为 Form 参数传递给 setupUi

因此,您在 FormProc.py 中创建的 FormProc class 目前完全是多余的。要使它有用,您需要使其成为 顶级小部件 的子 class,然后向其添加 ui。有几种方法可以做到这一点。这是一种方法:

FormProc.py:

from PyQt4 import QtGui
from Form import Ui_Form

class FormProc(QtGui.QWidget):
    def __init__(self, parent=None):
        super(FormProc, self).__init__(parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)

    def closeEvent(self, event):
        print('close event')

Main.py:

import sys
from PyQt4 import QtGui
from FormProc import FormProc

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv) 
    MainWindow = FormProc()
    MainWindow.show()
    sys.exit(app.exec_())

有关其他示例,请参阅 PyQt4 文档中的 Using Qt Designer