как сделать ячейку в QTableWidget только для чтения? - PullRequest
6 голосов
/ 11 октября 2011

у меня есть следующий код, определяющий графический интерфейс моего приложения

class Ui (object):
    def setupUi():
        self.tableName = QtGui.QTableWidget(self.layoutWidget_20)
        self.tableName.setObjectName(_fromUtf8("twHistoricoDisciplinas"))
        self.tableName.setColumnCount(4)
        self.tableName.setRowCount(3)

и следующий код в моем приложении

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        self.ui = Ui()
        self.ui.setupUi(self)
        self.createtable()

    #creating a tw cell
    def cell(self,var=""):
            item = QtGui.QTableWidgetItem()
            item.setText(var)
            return item

    def createtable(self):
         rows = self.tableName.rowCount()
         columns = self.tableName.columnCount()
         for i in range(rows):
             for j in range(columns):
                 item = self.cell("text")
                 self.ui.tableName.setItem(i, j, item)

Я хочу иметь возможность добавлять новые строки и столбцы и редактировать их, но я хочу заблокировать некоторые ячейки. (у меня уже есть код, который расширяет таблицу) Как я могу сделать некоторые ячейки только для чтения, в то время как другие будут читать и писать? я нашел эту ссылку Как сделать столбец в QTableWidget только для чтения? с решением проблемы в C ++, похоже ли решение Python?

РЕДАКТИРОВАТЬ: удалил ответ из поста и вставить как ответ

Ответы [ 3 ]

17 голосов
/ 13 октября 2011

Я немного поиграл с кодом и прочитал еще немного документации ответ на проблему

def createtable(self):
     rows = self.tableName.rowCount()
     columns = self.tableName.columnCount()
     for i in range(rows):
         for j in range(columns):
             item = self.cell("text")
             # execute the line below to every item you need locked
             item.setFlags(QtCore.Qt.ItemIsEnabled)
             self.ui.tableName.setItem(i, j, item)

Решением является строка "item.setFlags (QtCore.Qt.ItemIsEnabled)", которую вы используете, чтобы отключить свойство ячейки QtCore.Qt.ItemIsEnabled, поэтому вы не можете выбрать или изменить ячейку

Вы можете изменить ряд других свойств таким образом во время выполнения согласно documentarion на http://doc.qt.io/archives/qt-4.8/qt.html в разделе Qt :: ItemFlag

, как упомянуто в комментарии Свена ко второму ответу на этот вопрос, если у вас есть статическое количество строк и столбцов в QTableWidgetItem, вы можете выбрать свойства ячеек с помощью Qtdesigner, если вы используете его для создания экранов для ваше приложение

9 голосов
/ 10 февраля 2017

Состояние редактирования QTableWidgetItem никогда не вводится, когда нет триггеров редактирования:

self.tableName.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)

2 голосов
/ 21 апреля 2018

Как и Ответ Свена Крюгера , вы также можете использовать эти методы для PyQt5 :

self.tableWidget.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)
...