防止 registerField 清除小部件

Prevent registerField from clearing the widget

我在下面的示例代码中使用 registerFieldPage2QLineEdit 小部件。

当我在 Page2QLineEdit 中输入一些文本并返回到 Page1,然后继续返回到 Page2QLineEdit 字段已清除。

如果我评论 registerField 行,它不会。

如何防止 self.lineedit 在使用 registerField

时被清除

示例代码

from PyQt5 import QtCore, QtWidgets

class TestWizard(QtWidgets.QWizard):
    def __init__(self, parent=None):
        super(TestWizard, self).__init__(parent)
        self.addPage(Page1(self))
        self.addPage(Page2(self))
        self.finished.connect(self.onFinished)
    
    def onFinished(self):
        print(self.field('entry'))
        
class Page1(QtWidgets.QWizardPage):
    def __init__(self, parent=None):
        super(Page1, self).__init__(parent)
        self.comboBox = QtWidgets.QComboBox()
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.comboBox)
        self.setLayout(layout)


class Page2(QtWidgets.QWizardPage):
    def __init__(self, parent=None):
        super(Page2, self).__init__(parent)
        self.lineedit = QtWidgets.QLineEdit()
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.lineedit)
        self.setLayout(layout)
        self.registerField('entry',self.lineedit) # Commenting this line prevents self.lineedit from clearing

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    t = TestWizard()
    t.show()
    sys.exit(app.exec_())

一种可能的解决方案是重写仅清除字段的 cleanupPage 方法:

class Page2(QtWidgets.QWizardPage):
    def __init__(self, parent=None):
        super(Page2, self).__init__(parent)
        self.lineedit = QtWidgets.QLineEdit()
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.lineedit)
        self.setLayout(layout)
        self.registerField("entry", self.lineedit)

    def cleanupPage(self):
        pass