class Ui_MainWindow(QtGui.QWidget):
def __init__(self):
super(Ui_MainWindow, self).__init__()
print('[Ui_MainWindow] __init__')
def closeEvent(self, event):
print("[ Ui_MainWindow closeEvent] event triggered...")
...
class Ui_Wrapper(Ui_MainWindow):
def __init__(self, MainWindow):
super(Ui_Wrapper, self).__init__()
self.MainWindow = MainWindow
self.setupUi(MainWindow)
self.add_listeners()
MainWindow.show()
def closeEvent(self, event):
print("[ Ui_Wrapper closeEvent] event triggered...")
super(Ui_Wrapper,self).closeEvent(event)
...
if __name__ == "__main__":
...
print(sys.argv)
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_Wrapper(MainWindow)
sys.exit(app.exec_())
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
...
ui.show()
片段A和B都呈现了GUI,但是只有片段B允许我捕获closeEvent。我正在使用PyQT设计工具来构建GUI,每次都会覆盖主GUI文件,因此我需要一个包装器(Ui_Wrapper)来处理侦听器设置等。这就是为什么我需要使用代码段A的原因。
任何想法?我是否错过了init函数中的某些内容?
我找到了一种解决方法,现在可以使用ui.loadUi使用。这使我可以在QT Designer中进行更改而不会影响我的代码。这里有关于它的详细文章:import PyQT ui files
class Ui_MainWindow(QtGui.QMainWindow):
def __init__(self):
super(Ui_MainWindow, self).__init__()
uic.loadUi('app.ui', self)
self.add_listeners()
self.show()