QStyledItemDelegate与QComboBox:显示索引而不是文本

时间:2013-07-14 09:51:57

标签: python pyqt pyside

我有一张表QStyledItemDelegate。在一个单元格中,我通过代理人QComboBox创建了createEditor。我通过comboboxself.addItem("an item");列表中添加了一些项目,但是当我进入表格并实际选择我添加的项目时,它们会被从0开始的索引值替换。

如何让QComboBox显示我在addItem中添加的实际文字,而不是他们存储的索引?

以下是我的问题的一个小例子:

import sys
from PySide import QtCore, QtGui, QtSql

class EditDelegate(QtGui.QStyledItemDelegate):
    def __init__(self, parent=None):
            super(EditDelegate, self).__init__(parent)
    def createEditor(self, parent, option, index):
            editor = TheEditor(parent)                  
            return editor

class TheEditor(QtGui.QComboBox):
    def __init__(self, parent=None):
            super(TheEditor, self).__init__(parent)
            self.addItem("Item 1")
            self.addItem("Item 2")
            self.addItem("Item 3")
            self.setEditable(True)

class TheTable(QtGui.QTableWidget):
    def __init__(self, columns, parent=None):
            super(TheTable, self).__init__(parent)
            self.setItemDelegate(EditDelegate())
            self.setEditTriggers(QtGui.QAbstractItemView.AllEditTriggers)
            self.setColumnCount(1)
            self.setRowCount(1)
            self.setHorizontalHeaderLabels(["QCombo"])

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
            self.setCentralWidget(TheTable(self))

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    frame = MainWindow()
    frame.show()
    app.exec_()

2 个答案:

答案 0 :(得分:0)

将PySide更新到最新版本可以解决问题。

答案 1 :(得分:0)

似乎默认的组合代理正在搞乱它收到的数据。你可以用自定义委托修复它以绘制正确的数据。但既然你已经解决了它,恭喜!。