【问题标题】:how can disable some column in QtableView pyqt?如何禁用 QtableView pyqt 中的某些列?
【发布时间】:2014-04-05 21:15:37
【问题描述】:

我想填充一个 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 column 5 line 有点笨的解决办法:p

【问题讨论】:

    标签: python pyqt qtableview


    【解决方案1】:

    使用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 2019-03-11
      • 2019-01-24
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      相关资源
      最近更新 更多