有对话框:
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()
已经尝试了一段时间,但却无法想出这个。
答案 0 :(得分:1)
只是注意:我注意到你标记了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)
返回给定列中所有列的行的索引 被选中。
我认为使用selectedIndexes
更容易list-of-QModelIndex QItemSelectionModel.selectedIndexes(self)
返回所有选定模型项索引的列表。该清单包含 没有重复,也没有排序。
要获取数据,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”列表应该始终是一个单独的元素列表(你用“点击”信号连接它),所以row [0]应该返回正确的元素。
有关其他信息,请参阅此处: http://ftp.ics.uci.edu/pub/centos0/ics-custom-build/BUILD/PyQt-x11-gpl-4.7.2/doc/html/qtsql.html 大约一半的时间里有一个“使用SQL模型类”标题和一些很好的例子。
答案 1 :(得分:0)
对于记录和其他情况我的答案是
def handlebutton(self):
rows = self.tableView.selectionModel().selectedIndexes()
print(self.projectModel.record(rows[0].row()).value("rowid"))
self.newwindow = classformularesult(self)
self.newwindow.show()
谢谢SEGFAULTCODER