Запускаете ли вы файл .ui через инструмент ui c, чтобы создать файл Python, содержащий ваш Ui_MainWindow
? Я ожидаю, что результат этого будет выглядеть примерно так:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'C:\Users\gary\Desktop\mw\MainWindow.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(400, 300)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "Form", None))
Результат будет перезаписываться при каждом изменении пользовательского интерфейса в Designer и повторном запуске пользовательского интерфейса c, как вы и сказали. Таким образом, в отдельном файле вы импортируете Ui_MainWindow
и подкласс для переопределения closeEvent()
:
from PyQt4 import QtGui
from Ui_MainWindow import Ui_MainWindow
class MainWindow(QtGui.QWidget, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
def closeEvent(self, event):
print("[ MainWindow closeEvent] event triggered...")
super(MainWindow, self).closeEvent(event)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())