PyQtでモデル/ビューを学習しようとしています(このスレッドを参照:Unable to inherit from QAbstractItemModel)。マッピング割り当てを追加しようとすると、アプリケーションがハングしています。私のカスタムデータモデルクラスは次のとおりです。QDataWidgetMapper.addMapping(...)によってアプリケーションがハングする
class MyCustomDataModel(QAbstractItemModel):
def __init(self, parent = None):
super(MyCustomDataModel, self).__init__(parent)
self.parent = None
def rowCount(self, parent):
return 1
def data(self, index, role):
if not index.isValid():
return None
if role == Qt.DisplayRole or role == Qt.EditRole:
if index.column() == 0:
return self.parent.value0
elif index.column() == 1:
return self.parent.value1
elif index.column() == 1:
return self.parent.value2
def setData(self, index, value, role = Qt.EditRole):
if role == Qt.EditRole:
if index.column() == 0:
self.parent.value0 = value
elif index.column() == 1:
self.parent.value1 = value
elif index.column() == 2:
self.parent.value2 = value
self.dataChanged.emit(index, index)
ここでは、データモデルを使用しようとしているクラスがあります。それは私がウィジェットにマップしたい変数が含まれています
class MyCustomType(AnotherCustomTypeThatInheritsQListWidgetItem):
def __init__(self, parent = None):
super(MyCustomType, self).__init__(parent)
# Some member data:
self.value0 = 0
self.value1 = 1
self.value2 = 2
# Instantiate a model:
self.dataModel = MyCustomDataModel()
self.dataModel.parent = self
私は3つのにQLineEditウィジェットを含む複合ウィジェットを持っている:
class MyCompositeWidget(QWidget):
def __init__(self, parent = None):
super(MyCompositeWidget, self).__init__(parent)
self.dataMapper = QDataWidgetMapper()
# Instantiate three line edits:
self.lineEdit1 = QLineEdit()
self.lineEdit2 = QLineEdit()
self.lineEdit3 = QLineEdit()
# Add widgets to layout, set layout, etc. Not shown but widgets display properly.
def Activate(self, anInstanceofMyCustomType):
self.dataMapper.setModel(anInstanceOfMyCustomType.dataModel)
self.dataMapper.addMapping(self.lineEdit1, 0) # This line causes application to hang indefinately
self.dataMapper.addMapping(self.lineEdit2, 1)
self.dataMapper.addMapping(self.lineEdit3, 2)
実行時にアプリケーションが示されている「addMapping」コールでハング"Activate(...)"機能で使用します。チュートリアルはオンラインではっきりとわかりません。私はかなり "index.column()"マッピングについて混乱していることを認めなければなりませんが、これはインデックスがデータメンバーに割り当てられる方法です。とにかく、どんな助けも非常に高く評価されています...私はこれを学ぶために多くの時間を費やしてきました。
ここに行く1つの方法は、必要でないものをすべて削除してから、動作する状態になるまでコードをさらに単純化することです。最小限の完全な例は、他の人が問題を調査するのを手助けすることです。 – Trilarion