Как сделать QTable доступным для редактирования только для второго значения столбца и только для чтения для первого столбца?
Существует несколько решений, позволяющих сделать элементы всего столбца доступными только для чтения / редактирования.
модифицируйте флаги, нет необходимости реализовывать настраиваемую модель, как это предлагается PyThagoras ответы , поскольку модель QStandardItemModel позволяет изменять их:
# To make them editable:
item.setEditable(True)
# or
# item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)
# To make them readonly:
item.setEditable(False)
# or
# item.setFlags(item.flags() & ~QtCore.Qt.ItemIsEditable)
Используйте редактор делегата, поскольку модель QStandardItemModel редактируется по умолчанию, поэтому достаточно sh установить, что столбец 0 не редактируется, и для этого вам не следует создавать редактор. :
class ReadOnlyDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(self, parent, option, index):
return
delegate = ReadOnlyDelegate(self.tableView)
self.tableView.setItemDelegateForColumn(0, delegate)
Я предпочитаю второй вариант, поскольку по умолчанию он устанавливает, что первый столбец доступен только для чтения.
Как получить индекс отмеченного элемента, чтобы вы могли получить значение второго столбца, соответствующего отмеченному элементу?
Общий метод c - получить доступ к отцу, а затем сын, который находится в той же строке, но во втором столбце:
parent_item = item.parent()
if parent_item is not None:
second_item = parent_item.child(item.row(), 1)
else:
second_item = item.model().item(item.row(), 1)
print(second_item.text())
Но в вашем случае это можно упростить до:
second_item = self.tableModel.item(item.row(), 1)
print(second_item.text())