0

sqlite3 データベース テーブルのデータが入力された基本的なコンボ ボックスがあります。

self.langModel = QSqlTableModel(self)
self.langModel.setTable("languages")
self.langModel.setSort(self.langModel.fieldIndex("label"), Qt.AscendingOrder)
self.langModel.select()

...

self.comboLangs = QComboBox()
self.comboLangs.setModel(self.langModel)
self.comboLangs.setModelColumn(self.langModel.fieldIndex("label"))
self.layout.addRow("Language", self.comboLangs)

...

self.btnAdd = QPushButton("Add")
self.btnAdd.clicked.connect(self.addLoc)
self.btnLayout.addWidget(self.btnAdd)

...

def addLoc(self):
    pprint(vars(self.langModel.data(self.langModel.index(self.comboLangs.currentIndex(), self.langModel.fieldIndex("iso")))))

テーブル スキーマは次のとおりです。

CREATE TABLE languages ( 
    id    INTEGER PRIMARY KEY NOT NULL,
    iso   TEXT    NOT NULL,
    label TEXT    NOT NULL 
);

これは空の dict を生成するだけ{}です。QSqlTableModel から選択/現在のアイテムのデータ オブジェクトを取得するにはどうすればよいですか?

4

1 に答える 1

4

わかりました(PyQtリファレンスドキュメントがこれを行う方法についてもう少し具体的だったらいいのにと思います)。とにかく、モデル データを取得するには、QVariant オブジェクトを Python オブジェクト (toPyObject()) またはトリング (toString()) に変換する必要がありました。

print self.langModel.data(self.langModel.index(self.comboLangs.currentIndex(), self.langModel.fieldIndex("iso"))).toString()

これで必要なデータが得られました。

于 2014-04-21T02:46:28.443 に答える