如何给closeEvent()提供参数

时间:2019-01-31 09:50:09

标签: python pyqt5

我使用GUI创建一个Qt Designer。现在,我需要给closeEvent附加参数。如何为closeEvent赋予额外的参数?该参数将是另一个窗口的实例。这样我就可以将此实例用作closeEvent中另一个函数的参数。 下面是一个简化的代码。

class UiMain(QtWidgets.QMainWindow):
    def __init__(self, subwindow):
        super(UiMain, self).__init__()
        self.ui = Ui_UiArtikelkarte()
        self.ui.setupUi(self)
        self.show()

    def closeEvent(self, event, subwindow):
        some_function(self, source=subwindow)
        event.accept()


app = QtWidgets.QApplication(sys.argv)
win1 = UiMain(subwindow)
sys.exit(app.exec_())

这给了我课程:

TypeError: closeEvent() missing 1 required positional argument: 'subwindow'

有什么方法可以给closeEvent附加参数? 帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

由于将额外的参数传递给构造函数,也许您可​​以只保存数据并将其显示在closeEvent方法上。

class UiMain(QtWidgets.QMainWindow):
    def __init__(self, test):
        super(UiMain, self).__init__()
        self.test = test
        self.ui = Ui_UiArtikelkarte()
        self.ui.setupUi(self)
        self.show()

    def closeEvent(self, event):
        print(self.test)
        event.accept()


app = QtWidgets.QApplication(sys.argv)
win1 = UiMain("hello")
sys.exit(app.exec_())

答案 1 :(得分:0)

我认为您必须将子窗口作为属性传递:

class UiMain(QtWidgets.QMainWindow):
    def __init__(self, subwindow):
        super(UiMain, self).__init__()
        self.subwindow = subwindow
        self.ui = Ui_UiArtikelkarte()
        self.ui.setupUi(self)
        self.show()

    def closeEvent(self, event):
        some_function(self, source=self.subwindow)
        event.accept()


app = QtWidgets.QApplication(sys.argv)
win1 = UiMain(subwindow)
sys.exit(app.exec_())