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

发布于 2024-12-27 22:25:19 字数 472 浏览 2 评论 0原文

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

抱歉,我在这方面是个初学者。太初学者了,我无法通过阅读文档来弄清楚:(

I populate a QListView with QSqlTableModel.

  projectModel = QSqlTableModel()
  projectModel.setTable("project")
  projectModel.select()

  projectView = QListView()
  projectView.setModel(projectModel)
  projectView.setModelColumn(1)
  • edit my wording a bit. -

Say my QSqlTableModel has 3 columns. (0) for id, (1) for name, (2) for color, for example.

In my QListView I'm displaying column 1, so only the names. Then I have 1 item selected. How can I retrieve that item's id and color?

Sorry I'm a very beginner at this. Too beginner I can't figure things out reading documentations :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无可置疑 2025-01-03 22:25:19

虽然我不完全理解你想要做什么,但我正在向你展示你的两个问题的答案。

例如我们有一个 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_()

您可以循环查询并访问数据。

Though i didn't fully understand what you are trying to do, I'm showing you the answer of your two question.

For example we have an sqlite3 database "sqlitedb.rdb"
And a table name "info",

CREATE TABLE info (
id integer  PRIMARY KEY AUTOINCREMENT DEFAULT NULL,
name TEXT(20) DEFAULT NULL,
country TEXT(20) DEFAULT NULL,
age integer)

and have some data,

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');

Now,

I only want to display the id and name (column 0 and 1) how do I do that?

To do this you can,

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_()

You can set which field/column you want to show using the query.

and,

how can I retrieve the information from different columns of the item I have selected?

You can navigate through the result of the query and have the data, example,

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_()

you can loop through the query and get access to the data.

德意的啸 2025-01-03 22:25:19

在我的 QListView 中,我显示第 1 列,因此仅显示名称。然后我
已选择 1 项。我如何检索该项目的 ID 和颜色?

请检查以下示例。您可以向 QListView 的“clicked”槽添加一个函数。然后获取选择了哪一行。

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_()

In my QListView I'm displaying column 1, so only the names. Then I
have 1 item selected. How can I retrieve that item's id and color?

Please check the following example. You can add a function to the "clicked" slot of QListView. Then get the which row is selected.

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_()
无声无音无过去 2025-01-03 22:25:19

您可以使用模型的 selectedIndexes() 方法来获取所选项目的索引,然后使用

idx = self.projectView.selectionModel().selectedRows()

获取所需的值

for rec in idx:
    entry = rec.row()
    val = self.projectModel.record(entry).field(x).value()

idx 循环,您可以使用 x 您想要检索的列号

val 现在是一个 QVariant,您可以进一步详细说明它。

You can use the selectedIndexes() method of the model to get the indexes of the selected items using something like

idx = self.projectView.selectionModel().selectedRows()

then looping on idx, you can get the values you need with

for rec in idx:
    entry = rec.row()
    val = self.projectModel.record(entry).field(x).value()

with x beeing the number of the column you want to retrive

val is now a QVariant and you can further elaborate it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文