문제

나는 설정하려는 열에 테이블을 읽기 전용입니다!i tried 가능한 모든 조합의 깃발 성공

    item = QtGui.QTableWidgetItem()
    from operator import xor
    item.setFlags(xor(item.flags(),QtCore.Qt.ItemIsEditable))
    self.Table.setHorizontalHeaderItem(4, item)

and not, !=^ 운영자 하지만 열 항목은 여전히 편집


업데이트

제가 생각했을 오해하다!내가 생각할 때 나는 설정 HorizontalHeaderItem 에 열을 편집할 수 없는 것입니다 모든 새로운 항목에서는 열을 자동으로 편집할 수 없습니다,사용할 경우 작업 insertRow()

나는 이러한 기능을 각각 새로 추가되는 항목을 삽입한 후에 새로운 행!

        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() 을 만드는 읽기 전용잡도록 커스텀을 구축합니다. 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())

고합니다.

    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)

다른 팁

try:

    flags != QtCore.Qt.ItemIsEditable
    item.setFlags(flags)

이 나를 위해 일하는 마지막 시간:-)

편집:죄송하지 않는 상세한 여기에.물론을 적용하는 데 필요한 모든 항목에서 원하는 열을,예를 들어:

flags = Qt.ItemFlags()
flags != Qt.ItemIsEnabled

for r in range(rows):
    for c in range(columns):
        item = QTableWidgetItem('Row %s Column %s' % (r,c))
        if c == 2:
            item.setFlags(flags)
        table.setItem(r, c, item)

이 설정 3 열을 읽기 전 품목에서는 열이 있습니다.HTH

이 솔루션은 다음과 같은 위의 단순화할 수 있습기:

class MyDelegate(QtWidgets.QItemDelegate):

    def createEditor(self, *args):
        return None

table = QtWidgets.QTableWidget(2, 2)
table.setItemDelegateForColumn(MyDelegate())

이 솔루션과 다릅니다 ItemIsEditable 솔루션 감각을 선택할 수 있습 강조 표시 항목에서는 열이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top