如何禁用QtableView pyqt中的某些列?

2024-04-26 07:46:00 发布

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

我想填充一个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行是一个有点愚蠢的解决方案:p


Tags: 用户self权限内容modeldefrowsheaders
1条回答
网友
1楼 · 发布于 2024-04-26 07:46:00

使用proxy model控制表模型上的flags

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)

相关问题 更多 >