如何修改QDataWidgetMapp中的值

2024-05-14 21:46:18 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我使用QDataWidgetMapper将QSqlQueryModel中的值映射到接口中的小部件。这是很好的工作,每次我的模型更新或刷新,小部件也更新。。。太好了!在

我们说QLabel。。。这个QLabel被映射到模型中名为“City”的字段,QLabel显示的文本显示为“LONDON”。有没有一种方法可以格式化文本,使其显示为“London”?在不改变qsymodel的情况下查询qsymdel关系的同时?在

谢谢!在

编辑-下面是一个简化的代码示例:

import sys
from PyQt4 import QtCore, QtGui


class DemoModel(QtCore.QAbstractTableModel):
    def __init__(self):
        super(DemoModel, self).__init__()
        self.visibleColumns = ['city', 'country']
        self.items = [
            {'city': 'LONDON', 'country': 'England'},
            {'city': 'GLASGOW', 'country': 'Scotland'},
            {'city': 'CARDIF', 'country': 'Wales'},
            ]


    def rowCount(self, parent=QtCore.QModelIndex()):
        return len(self.items)


    def columnCount(self, parent=QtCore.QModelIndex()):
        return len(self.visibleColumns)


    def data(self, index, role=QtCore.Qt.DisplayRole):
        if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.ToolTipRole:
            colName = self.visibleColumns[index.column()]
            return self.items[index.row()].get(colName, '')


    def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
        if role == QtCore.Qt.DisplayRole and orientation == QtCore.Qt.Horizontal:
            return self.visibleColumns[section]



class TestWindow(QtGui.QWidget):
    def __init__(self):
        super(TestWindow, self).__init__()
        self.resize(100, 100)
        layout = QtGui.QVBoxLayout(self)

        demoLabel = QtGui.QLabel()
        layout.addWidget(demoLabel)
        mapper.addMapping(demoLabel, 0, "text")



model = DemoModel()
mapper = QtGui.QDataWidgetMapper()
mapper.setModel(model)

app = QtGui.QApplication(sys.argv)
demo =  TestWindow()
demo.show()
sys.exit(app.exec_())

Tags: selfcityreturninitdefsysqtcountry
1条回答
网友
1楼 · 发布于 2024-05-14 21:46:18

您应该在数据映射器上设置一个项委托,并重新实现setEditorData方法:

class ItemDelegate(QtGui.QItemDelegate):
    def setEditorData(self, editor, index):
        editor.setText(index.data().title())

mapper = QtGui.QDataWidgetMapper()
mapper.setModel(model)
delegate = ItemDelegate()
mapper.setItemDelegate(delegate)

要使其正常工作,必须在不指定属性名的情况下进行映射:

^{pr2}$

(请注意,对于可编辑的显示小部件,您可能还需要重新实现setModelData方法)。在

相关问题 更多 >

    热门问题