PyQt Редактирование одной конкретной ячейки таблицы

Как реализовать задачу?

Есть таблица, не доступная для редактирования и даже для фокуса. По нажатию первой кнопки:

  1. Таблица разблокируется
  2. Определённая ячейка таблицы (пусть, например, (1,1) становится доступна для редактирования
  3. По нажатию второй кнопки снова вешаются все запреты.
import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
import pandas as pd

table_data = [['Параметр 1', '111', '222'],
            ['Параметр 2', '333', '444'],
            ['Параметр 3', '555', '666'],
            ['Параметр 4', '777', '888']]


class PandasModel(QAbstractTableModel):
    def __init__(self, table):
        QAbstractTableModel.__init__(self)
        data =  pd.DataFrame(table)
        self._data = data
    def rowCount(self, parent=None):
        return self._data.shape[0]
    def columnCount(self, parnet=None):
        return self._data.shape[1]
    def data(self, index, role=Qt.DisplayRole):
        if index.isValid():
            if role == Qt.DisplayRole:
                return str(self._data.iloc[index.row(), index.column()])
        return None
    def headerData(self, col, orientation, role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            return self._data.columns[col]
        return None


class MyTable(QTableView):
    def __init__(self, model:QAbstractTableModel, data, parent=None):
        super().__init__(parent)
        self.data = data
        self.model = model
        self.horizontalHeader().setVisible(True)
        self.model = model(pd.DataFrame(data, columns=['Параметры', 'Существующие', 'Допустимые']))
        self.setModel(self.model)
        # запрет фокуса
        self.setFocusPolicy(Qt.NoFocus)
        # запрет выбора и редактирования
        self.setSelectionMode(QAbstractItemView.NoSelection)
        self.setSelectionBehavior(QAbstractItemView.SelectRows)

class Main(QWidget):
    def __init__(self):
        super().__init__()
        t  = MyTable(PandasModel, table_data)
        edit_cell_button = QPushButton('edit cell')
        edit_cell_button.clicked.connect(self.handle_edit_cell_button)
        disable_access_table_button = QPushButton('disable edit cell')
        disable_access_table_button.clicked.connect(self.handle_disable_access_table_button)
        vbox = QVBoxLayout()
        vbox.addWidget(t)
        vbox.addWidget(edit_cell_button)
        vbox.addWidget(disable_access_table_button)
        self.setLayout(vbox)

    # снять запрет на доступ к таблице + ращрешить рерадктировать одну ячейку
    def handle_edit_cell_button(self):
        pass

    # запретить доступ к таблице
    def handle_disable_access_table_button(self):
        pass


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Main()
    window.show()
    sys.exit(app.exec())

Ответы (0 шт):