세트 전체에서 열`QTableWidget`읽기 전에는 파이썬
문제
나는 설정하려는 열에 테이블을 읽기 전용입니다!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
솔루션 감각을 선택할 수 있습 강조 표시 항목에서는 열이 있습니다.