2016-10-26 2 views
0

есть диалог:Печать данных кликнутой строки из Tableview модели

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 прекрасно работает просто нужно напечатать, что щелкнули Row

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

Какой вопрос? Что происходит, когда вы запускаете код? Что вы ожидали вместо этого? – Robert

+0

код работает отлично, за исключением того, что print [], что я ищу, это данные внутри выбранной строки –

+0

Итак, 'rows' - ​​это объект --- какие методы вы можете использовать позвонить ему? – Robert

ответ

1

Просто примечание: я заметил, что вы отметили PyQt5, но документы там не так хороши, и я уверен, что все, что я заявляю, все еще применяется (от PyQt4).

Похоже, что вы предполагаете, что rows будет содержать данные из вашего запроса, а это не так. selectedRows(),selectedColumns,selectedIndexes() (документально здесь: http://pyqt.sourceforge.net/Docs/PyQt4/qitemselectionmodel.html#selectedRows) все возврат type list-of-QModelIndex, которые в основном индексы .. нет данные.

список-оф-QModelIndex QItemSelectionModel.selectedRows (сам, Int колонки = 0)

Возвращают индексы в данном столбце для строк, где все столбцы выбраны.

Я думаю, что легче использовать selectedIndexes

список-оф-QModelIndex QItemSelectionModel.selectedIndexes (само)

Возвращает список всех выбранных индексов модели элементов. Список содержит нет дубликатов и не сортируется.

Для получения данных 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() 

Ряды [0] .row() обращаются к элементу 0 типа "список-оф-QModelIndex", который возвращается, и QModelIndex (http://pyqt.sourceforge.net/Docs/PyQt4/qmodelindex.html#details) имеет метод строки() который возвращает индекс строки. Учитывая то, как вы его настроили, список «list-of-QModelIndex» всегда должен быть списком отдельных элементов (вы подключили его с помощью «щелчка»), поэтому строка [0] должна вернуть правильный элемент ,

Смотрите здесь для получения дополнительной информации: http://ftp.ics.uci.edu/pub/centos0/ics-custom-build/BUILD/PyQt-x11-gpl-4.7.2/doc/html/qtsql.html Около половины пути вниз есть «Использование моделей SQL классов» заголовок с некоторыми хорошими примерами.

+0

print (self.projectModel.record (rows [0] .row()).значение («rowid»)) ЕГО РАБОТА Большое спасибо –

+0

awesome! рад, что это сработало – segFaultCoder

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