从QListView中的选定项目获取数据

时间:2012-01-19 09:19:40

标签: python pyqt

我使用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和颜色?

对不起,我是一个非常初学者。太初学者我无法弄清楚阅读文件:(

3 个答案:

答案 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,您可以进一步详细说明。