我使用QSqlTableModel填充QListView。
projectModel = QSqlTableModel()
projectModel.setTable("project")
projectModel.select()
projectView = QListView()
projectView.setModel(projectModel)
projectView.setModelColumn(1)
假设我的QSqlTableModel有3列。 (0)表示id,(1)表示名称,(2)表示颜色,例如。
在我的QListView中,我正在显示第1列,所以只显示名称。然后我选择了1个项目。如何检索该项目的ID和颜色?
对不起,我是一个非常初学者。太初学者我无法弄清楚阅读文件:(
答案 0 :(得分:6)
虽然我并不完全明白你想要做什么,但我会告诉你两个问题的答案。
例如我们有一个sqlite3数据库“sqlitedb.rdb” 表格名称为“info”,
CREATE TABLE info (
id integer PRIMARY KEY AUTOINCREMENT DEFAULT NULL,
name TEXT(20) DEFAULT NULL,
country TEXT(20) DEFAULT NULL,
age integer)
并有一些数据,
INSERT INTO info (name,country,age) VALUES ('Leroy Hale','San Marino','46');
INSERT INTO info (name,country,age) VALUES ('William Coleman','Namibia','50');
INSERT INTO info (name,country,age) VALUES ('Phelan Waller','Belgium','43');
INSERT INTO info (name,country,age) VALUES ('Kato Martin','Virgin Islands, British','21');
INSERT INTO info (name,country,age) VALUES ('Jameson Mccoy','United Arab Emirates','45');
INSERT INTO info (name,country,age) VALUES ('Fulton Reeves','Belarus','34');
INSERT INTO info (name,country,age) VALUES ('Calvin Love','Morocco','28');
INSERT INTO info (name,country,age) VALUES ('Peter Solis','Bhutan','31');
INSERT INTO info (name,country,age) VALUES ('Connor Stephenson','Dominican Republic','26');
INSERT INTO info (name,country,age) VALUES ('Aristotle Smith','Chad','45');
现在,
我只想显示id和名称(第0列和第1列)我该怎么做?
要做到这一点,你可以,
from PyQt4.QtSql import QSqlQueryModel,QSqlDatabase,QSqlQuery
from PyQt4.QtGui import QTableView,QApplication
import sys
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("sqlitedb.rdb")
db.open()
projectModel = QSqlQueryModel()
projectModel.setQuery("select name,age from info",db)
projectView = QTableView()
projectView.setModel(projectModel)
projectView.show()
app.exec_()
您可以使用查询设置要显示的字段/列。
和
如何从我选择的项目的不同列中检索信息?
您可以浏览查询结果并获取数据,例如
from PyQt4.QtSql import QSqlDatabase,QSqlQuery
from PyQt4.QtCore import QCoreApplication
import sys
app = QCoreApplication(sys.argv)
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("sqlitedb.rdb")
db.open()
query = QSqlQuery()
query.exec_("select * from info")
while (query.next()):
id = query.value(0).toInt()
name = query.value(1).toString()
country = query.value(2).toString()
age = query.value(3).toInt()
print "name = %s \ncountry = %s" % (name,country)
app.exec_()
您可以遍历查询并访问数据。
答案 1 :(得分:3)
在我的QListView中,我正在显示第1列,所以只显示名称。然后我 已选择1项。如何检索该项目的ID和颜色?
请检查以下示例。您可以将函数添加到QListView的“单击”插槽中。然后选择哪一行。
from PyQt4.QtSql import QSqlDatabase,QSqlTableModel
from PyQt4.QtGui import QListView,QApplication
import sys
def listclicked(index):
row = index.row()
print "id = %s" % projectModel.record(row).field(0).value().toString()
print "country = %s" % projectModel.record(row).field(2).value().toString()
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("sqlitedb.rdb")
db.open()
projectModel = QSqlTableModel()
projectModel.setTable("info")
projectModel.select()
projectView = QListView()
projectView.setModel(projectModel)
projectView.setModelColumn(1)
projectView.clicked.connect(listclicked)
projectView.show()
app.exec_()
答案 2 :(得分:0)
您可以使用模型的selectedIndexes()
方法来获取所选项目的索引,例如
idx = self.projectView.selectionModel().selectedRows()
然后在idx上循环,您可以使用
获取所需的值for rec in idx:
entry = rec.row()
val = self.projectModel.record(entry).field(x).value()
x
使用您要检索的列数
val
现在是QVariant,您可以进一步详细说明。