如何禁用 QtableView pyqt 中的某些列?
Posted
技术标签:
【中文标题】如何禁用 QtableView pyqt 中的某些列?【英文标题】:how can disable some column in 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
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于如何禁用 QtableView pyqt 中的某些列?的主要内容,如果未能解决你的问题,请参考以下文章
PyQt5 QTableView:如何在保持默认样式/颜色的同时禁用用户交互/选择?