python qwidget closeEvent没有调用

时间:2016-02-29 13:43:56

标签: python events pyqt4

我使用设计师创建了表单。 所以,我有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函数不起作用。

1 个答案:

答案 0 :(得分:0)

如果你看一下 Form.py 中的类定义,你会发现它只是一个继承自object的简单命名空间。 setupUi方法创建Qt Deisgner中指定的所有小部件,并使它们成为此命名空间的属性。唯一的例外是顶级窗口小部件,必须作为setupUi参数传递给Form

因此,您在 FormProc.py 中创建的FormProc课程目前完全是多余的。要使其有用,您需要将其作为顶级窗口小部件的子类,然后将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