PyQt4:从子类中检测窗口关闭事件

问题描述 投票:0回答:1
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)
...

代码段A:

if __name__ == "__main__":
    ...
    print(sys.argv)
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_Wrapper(MainWindow)
    sys.exit(app.exec_())

摘要B:

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函数中的某些内容?

python pyqt4
1个回答
0
投票

我找到了一种解决方法,现在可以使用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()
© www.soinside.com 2019 - 2024. All rights reserved.