我有以下代码定义我的应用程序的 GUI
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 解决方案是否类似?
编辑:从帖子中删除答案并粘贴为答案
我玩了一下代码并阅读了更多文档 问题的答案是
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设置为禁用,这样您就无法选择或编辑单元格
您可以在运行时按照 Qt::ItemFlag 部分下的http://doc.qt.io/archives/qt-4.8/qt.html 上的文档以这种方式更改许多其他属性。
正如 Sven 在对此问题的第二个答案的评论中提到的,如果 QTableWidgetItem 中有静态数量的行和列,则可以使用 Qtdesigner 选择单元格的属性(如果您使用 Qtdesigner 为应用程序创建屏幕)
self.tableName.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
Sven Krüger's 的答案一样,您也可以将此方法用于 PyQt5:
self.tableWidget.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)
QtCore.Qt.ItemIsEditable
给出了很好的结果。
item = QtWidgets.QTableWidgetItem()
item.setFlags(item.flags() ^ QtCore.Qt.ItemIsEditable)
self.table_widget.setItem(row, column, item)
EditTrigger
:
self.tableWidget.setEditTriggers(QTableWidget.EditTrigger.NoEditTriggers)
for row in range(self.employess.rowCount()):
for col in range(self.employess.columnCount()):
self.tableName.item(row,col).setFlags(Qt.ItemFlag.ItemIsEditable)
self.tableName.item(row,col).setFlags(Qt.ItemFlag.ItemIsEditable)
self.tableName.item(row,col).setFlags(Qt.ItemFlag.ItemIsEditable)
self.tableName.item(row,col).setFlags(Qt.ItemFlag.ItemIsEditable)
self.tableName.item(row,col).setFlags(Qt.ItemFlag.ItemIsEditable)
self.tableName.item(row,col).setFlags(Qt.ItemFlag.ItemIsEditable)