gpt4 book ai didi

python - 从 tableView 模型打印单击行的数据

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:56 25 4
gpt4 key购买 nike

有一个对话框:

class classsearchresult(QDialog, Ui_Dialog):
def __init__(self, parent=None):
QDialog.__init__(self, parent)
self.setupUi(self)
self.tableView.setShowGrid(False)
self.tableView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
vh = self.tableView.verticalHeader()
vh.setVisible(False)
hh = self.tableView.horizontalHeader()
hh.setVisible(False)
hh.setStretchLastSection(True)
self.pushButton_2.clicked.connect(self.close)
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('formuladatabase')
db.open()
self.projectModel = QtSql.QSqlQueryModel(self)
self.projectModel.setQuery("select rowid, Name, Surname from search",db)
self.tableView.setModel(self.projectModel)
self.tableView.clicked.connect(self.handlebutton)

tableview 效果很好,只需要打印单击的行

def handlebutton(self):
rows = self.tableView.selectionModel().selectedIndexes()
print(self.projectModel.record(rows[0].row()).value("rowid").toInt())
self.newwindow = classformularesult(self)
self.newwindow.show()

已经尝试了一段时间,但无法解决这个问题。

最佳答案

请注意:我注意到您标记了 PyQt5,但那里的文档不太好,而且我非常有信心我在这里所说的一切仍然适用(来自 PyQt4)。

您似乎假设 rows 将包含查询中的数据,但事实并非如此。 selectedRows(),selectedColumns,selectedIndexes() (此处记录: http://pyqt.sourceforge.net/Docs/PyQt4/qitemselectionmodel.html#selectedRows )都返回类型 list-of-QModelIndex,它们基​​本上是索引..而不是数据。

list-of-QModelIndex QItemSelectionModel.selectedRows (self, int column = 0)

Returns the indexes in the given column for the rows where all columns are selected.

我认为使用selectedIndexes更容易

list-of-QModelIndex QItemSelectionModel.selectedIndexes (self)

Returns a list of all selected model item indexes. The list contains no duplicates, and is not sorted.

要获取数据,model.record.value() 返回一个 QVariant,您必须将其转换为正确的类型以进行打印。因此,就您而言:

rows = self.tableView.selectionModel().selectedIndexes()
print self.projectModel.record(rows[0].row()).value("rowid").toInt()
print self.projectModel.record(rows[0].row()).value("Name").toString()
print self.projectModel.record(rows[0].row()).value("Surname").toString()

rows[0].row() 正在访问返回的“list-of-QModelIndex”类型的元素 0,并且 QModelIndex ( http://pyqt.sourceforge.net/Docs/PyQt4/qmodelindex.html#details ) 有一个 row() 方法,该方法返回行的索引。鉴于您的设置方式,“list-of-QModelIndex”列表应始终是单个元素列表(您将其与“clicked”信号连接起来),因此 row[0] 应返回正确的元素。

请参阅此处了解更多信息: http://ftp.ics.uci.edu/pub/centos0/ics-custom-build/BUILD/PyQt-x11-gpl-4.7.2/doc/html/qtsql.html大约中间有一个“使用 SQL 模型类”标题,其中包含一些很好的示例。

关于python - 从 tableView 模型打印单击行的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com