python - 在 `QTableWidget`中将整列设置为python中的只读

标签 python qt qt5 pyside

我想将表格中的列设置为只读!我尝试了所有可能的标志组合都没有成功

    item = QtGui.QTableWidgetItem()
    from operator import xor
    item.setFlags(xor(item.flags(),QtCore.Qt.ItemIsEditable))
    self.Table.setHorizontalHeaderItem(4, item)
我也尝试了and not!=^运算符,但列项目仍可编辑

更新
我想我误会了!我认为当我使用insertRow()这样的操作时,将一列的Horizo​​ntalHeaderItem设置为不可编辑时,将使该列中的所有新项目自动变为不可编辑的
插入新行后,我已经对每个新添加的项目执行了这些功能!
        tableWidget.insertRow(row+1)
        if  tableWidget is self.myTable:
            item = QtGui.QTableWidgetItem()
            item.setFlags(item.flags() != QtCore.Qt.ItemIsEditable)
            tableWidget.setItem(row+1, 4, item)
我认为更好(但更复杂)的解决方案是使用setItemDelegateForColumn()QtGui.QItemDelegate()创建只读的Costum QTableWidgetItem,每次插入或创建新行时都会添加

编辑
好吧,我尝试如上所述使用setItemDelegateForColumn()QtGui.QItemDelegate(),但是收到以下警告
> python main.py
sys:1: RuntimeWarning: Invalid return value in function QItemDelegate.createEdit
or, expected PySide.QtGui.QWidget, got PySide.QtGui.QTableWidgetItem.
我的代码是
class QTableWidgetDisabledItem(QtGui.QItemDelegate):
    """
    """
    def __init__(self, parent):

        QtGui.QItemDelegate.__init__(self, parent)

    def createEditor(self, parent, option, index):
        item = QtGui.QTableWidgetItem()
        item.setFlags(item.flags() != QtCore.Qt.ItemIsEditable)
        return item

    def setEditorData(self, editor, index):
        editor.blockSignals(True)
        editor.setData(index, editor.text())
        editor.blockSignals(False)

    def setModelData(self, editor, model, index):
        model.setData(index, editor.text())
并在MainWindow中
    self.Size = QTableWidgetDisabledItem(self.MyTable)
    self.MyTable.setItemDelegateForColumn(4,self.Size)
这是个好主意...

最佳答案

我使用QLineEditor正常工作

class QTableWidgetDisabledItem(QtGui.QItemDelegate):
    """
    Create a readOnly QTableWidgetItem
    """
    def __init__(self, parent):

        QtGui.QItemDelegate.__init__(self, parent)

    def createEditor(self, parent, option, index):
        item = QtGui.QLineEdit(parent)
        item.setReadOnly(True)
        #item.setEnabled(False)
        return item

    def setEditorData(self, editor, index):
        editor.blockSignals(True)
        editor.setText(index.model().data(index))
        editor.blockSignals(False)

    def setModelData(self, editor, model, index):
        model.setData(index, editor.text())

然后只需按照以下方式使用它
self.Size = QTableWidgetDisabledItem(self.MyTable)
self.MyTable.setItemDelegateForColumn(4,self.Size)

关于python - 在 `QTableWidget`中将整列设置为python中的只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024815/

相关文章:

c++ - 函数指针和继承

qt5 - windows下为android构建qt5.1.1的qt3d

c++ - 用户选择行时的参数信号

c++ - QT 5.7串口读取速度很慢

python - Django:如何将平面查询集处理为嵌套字典?

python - sleep 不适用于 pyqt4

python - 帮助覆盖 python 导入

c++ - 在 Qt C++ 中使用 Qtreewidget 列出文件夹

python - 如何将文件重命名为文件名中的子字符串?

python - 使用谷歌应用引擎提供图像