如何在QTableView中禁用某些列?

3 投票
1 回答
2656 浏览
提问于 2025-04-18 01:30

我想要填充一个表格视图,但我想禁用一些列,这样用户就不能修改这些列的内容。

def remplissageTableView(self):

        headers=["Janvier", "fevrier","Mars","Avril","Mai","Juin","Juillet", "Aout","Septembre","Octobre","Novembre","Decembre"]
        rows=[]
        for i in range(5) :
            row = ["","","","","","","","","","","",""]
            rows.append(row)
        model =PrevisionTableModel(rows,headers) 
        self.tableView.setModel(model)

我最开始想要一个有12列和5行的表格视图,这样的想法有点傻:p

1 个回答

3

使用一个代理模型来控制表格模型中的标志

class ProxyModel(QtGui.QIdentityProxyModel):
    def __init__(self, parent=None):
        super(ProxyModel, self).__init__(parent)
        self._columns = set()

    def columnReadOnly(self, column):
        return column in self._columns

    def setColumnReadOnly(self, column, readonly=True):
        if readonly:
            self._columns.add(column)
        else:
            self._columns.discard(column)

    def flags(self, index):
        flags = super(ProxyModel, self).flags(index)
        if self.columnReadOnly(index.column()):
            flags &= ~QtCore.Qt.ItemIsEditable
        return flags

...
model = PrevisionTableModel(rows, headers) 
self.proxy = ProxyModel(self)
self.proxy.setSourceModel(model)
self.tableView.setModel(self.proxy)
self.tableView.model().setColumnReadOnly(3, True)

撰写回答