我正在创建一个 QWizard 并想要一个代表文件的组合框。组合框将显示文件名,但我需要整个路径,所以我将路径存储在组合框的 userData 中。为了访问另一个向导页面中的组合框数据,我使用了 registerField。组合框没有 currentData 方法,就像它有 currentIndex 或 currentText 一样,所以我创建了自己的组合框,它有一个 currentData 方法(在我的例子中,我总是返回一个 QString,所以我称之为 currentStringData)。当我将此新函数名称作为“属性”参数传递给 registerField 时,我没有得到任何结果。
谷歌搜索,我在 QtCentre 上遇到了其他人的问题——他们有同样的问题,但它是用 C++ 编写的,我很难从 C++ 示例转换为 python。http://www.qtcentre.org/threads/13858-QWizard-QComboBox-and-registerField()-issue。我相信我的派生类缺少一个发射,但我不确定是否是这种情况或如何做到这一点。
任何人都知道如何在 Python 中做到这一点?
我创建了一个非常简单的 python 脚本来演示我的问题。
#!/usr/bin/env python
from PyQt4 import QtCore,QtGui
class QIComboBox(QtGui.QComboBox):
def __init__(self,parent=None):
super(QIComboBox, self).__init__(parent)
def currentStringData(self):
return self.itemData(self.currentIndex()).toString()
class VariantWizard(QtGui.QWizard):
def __init__(self, parent=None):
super(VariantWizard, self).__init__(parent)
self.addPage(Page1())
self.addPage(Page2())
self.setWindowTitle("QVariant Test")
self.resize(640,480)
class Page1(QtGui.QWizardPage):
def __init__(self, parent=None):
super(Page1, self).__init__(parent)
self.version_combo = QIComboBox(self)
self.version_combo.addItem("foo","/path/to/foo")
self.version_combo.addItem("bar","/path/to/bar")
self.registerField("version",self.version_combo,"currentStringData")
layout = QtGui.QVBoxLayout()
layout.addWidget(self.version_combo)
self.setLayout(layout)
class Page2(QtGui.QWizardPage):
def __init__(self, parent=None):
super(Page2, self).__init__(parent)
path = self.field("version")
label1 = QtGui.QLabel("raw path is '%s'" % path)
label2 = QtGui.QLabel("string path is '%s'" % path.toString())
layout = QtGui.QVBoxLayout()
layout.addWidget(label1)
layout.addWidget(label2)
self.setLayout(layout)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
wizard = VariantWizard()
wizard.show()
sys.exit(app.exec_())
在此示例中,我希望第二页上的第一个标签是“原始路径是'/path/to/foo'”或“原始路径是'/path/to/bar'”,具体取决于哪个组合框项在第 1 页上被选中。我希望第二个标签是一个错误,因为 currentStringData 应该已经返回一个 QString。
相反,我得到“ raw path is '<PyQt5.QtCore.QVariant object....>'
”和“ string path is ''
”。