PySide2 / PyQT5如何在每次打开小部件(对话框)时重新初始化

时间:2019-04-28 10:39:20

标签: python pyqt5 pyside2


重新打开通知

我不知道该放在哪里...重新打开问题后,我将其删除。它已被关闭(单手操作)显然仅是因为我在评论中发布了指向另一个SO线程的链接。但是,此链接的目的不是回答这个问题,而是针对评论中的其他问题。这个问题没有被另一个问题回答,而是由评论回答。对@icwebndev回答评论中的问题并应该有机会真正回答这个问题,这是不公平的。


我确实有一个基于PySide2 / PyQT5的应用程序,到目前为止效果良好。在主窗口上,当我按下按钮时,将打开一个小部件(QDialog),该小部件将使用其__init__()方法执行一些初始化步骤。

当关闭此窗口(使用其close())方法并在以后重新打开时,使用__init__() is not called anymore, only the show()`方法。有没有办法在每次打开对话框时重新初始化对话框?

编辑:在写问题时,我想到只需将相关代码移至show()函数即可。另一方面,我感觉这不是实现此目的的方法。

下面是最小化的代码。首次打开窗口时的控制台输出为:

Hello_show
Hello_init

第二次是唯一的

Hello_show

mainWindow.py

def startWeighInButtonPressed(self):
    weighInWindow = WeighInWidget(parent=self, app=self.app)
    weighInWindow.show()

weighInWidget.py

class WeighInWidget(QtWidgets.QDialog):

    app = None  # type: QApplication

    def __init__(self, parent=None, app=None):

        # Get application instance
        self.app = app

        # Call parent
        super(WeighInWidget, self).__init__(parent)

        # Do some other init steps
        if initFailed
            error_msg = QtWidgets.QErrorMessage()
            error_msg.showMessage('Some Error message')
            error_msg.exec_()
            self.close()
            return

        # Setup UI
        self.ui = Ui_weighInWidget()
        self.ui.setupUi(self)
        print('Hello_init')

    def show(self):
        print('Hello_show')
        super().show()

    def close(self):
        self.deleteLater()
        super().close()

0 个答案:

没有答案