i have the following code defining the gui of my app
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)
and the following code in my app
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)
I want to be able to add new rows and columns and edit them but i want to lock some of the cells. ( i already have code that expand the table )
how can i make some cells read only while keeping the others read write?
i found this link How to make a column in QTableWidget read only? with a solution for the problem in C++, is python solution similar ?
EDIT: Removed the answer from the post and pasted as an answer
I played a little with the code and read some more documentation
the answer to the problem is
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)
The solution is the line “item.setFlags(QtCore.Qt.ItemIsEnabled)”, you use it to set the cell property QtCore.Qt.ItemIsEnabled to disabled, so you can’t select or edit the cell
You can change a number of other properties this way at runtime as per documentarion on http://doc.qt.io/archives/qt-4.8/qt.html under the section Qt::ItemFlag
as mentioned in a comment by Sven on the second answer to this question, if you have a static number of rows and columns in your QTableWidgetItem you can select the properties of the cells with Qtdesigner if you use it to create the screens for your application
Answered By – Rafael Rotelok
Answer Checked By – David Marino (BugsFixing Volunteer)