如何在PyQt中禁用QTableView中的某些列?

3

我想填充一个tableView,但我想禁用一些列,这样用户就无法修改其内容。

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)

我最初想要的是一个tableView,有12列5行。这个解决方案有点愚蠢:

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接