防止 registerField 清除小部件
Prevent registerField from clearing the widget
我在下面的示例代码中使用 registerField
和 Page2
的 QLineEdit
小部件。
当我在 Page2
的 QLineEdit
中输入一些文本并返回到 Page1
,然后继续返回到 Page2
的 QLineEdit
字段已清除。
如果我评论 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
我在下面的示例代码中使用 registerField
和 Page2
的 QLineEdit
小部件。
当我在 Page2
的 QLineEdit
中输入一些文本并返回到 Page1
,然后继续返回到 Page2
的 QLineEdit
字段已清除。
如果我评论 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