pyqt selection qtableview

¿Cómo puedo seleccionar por filas en lugar de celdas individuales en QTableView en PyQt?



rowcount pyqt5 (2)

En PyQt5 SelectRows ha movido. El código es ahora:

self.tv.setSelectionBehavior(QtWidgets.QTableView.SelectRows)

En el código de ejemplo siguiente (muy influenciado desde here ), quiero que se seleccione la fila completa de la celda seleccionada en lugar de la celda individual. ¿Cómo puedo cambiar el código para incorporar eso?

import re import operator import os import sys import sqlite3 import cookies from PyQt4.QtCore import * from PyQt4.QtGui import * def main(): app = QApplication(sys.argv) w = MyWindow() w.show() sys.exit(app.exec_()) class MyWindow(QWidget): def __init__(self, *args): QWidget.__init__(self, *args) # data self.tabledata = [(''apple'', ''red'', ''small''), (''apple'', ''red'', ''medium''), (''apple'', ''green'', ''small''), (''banana'', ''yellow'', ''large'')] self.header = [''fruit'', ''color'', ''size''] # create table self.createTable() # layout layout = QVBoxLayout() layout.addWidget(self.tv) self.setLayout(layout) def createTable(self): # create the view self.tv = QTableView() self.tv.setStyleSheet("gridline-color: rgb(191, 191, 191)") # set the table model tm = MyTableModel(self.tabledata, self.header, self) self.tv.setModel(tm) # set the minimum size self.tv.setMinimumSize(400, 300) # hide grid self.tv.setShowGrid(True) # set the font font = QFont("Calibri (Body)", 12) self.tv.setFont(font) # hide vertical header vh = self.tv.verticalHeader() vh.setVisible(False) # set horizontal header properties hh = self.tv.horizontalHeader() hh.setStretchLastSection(True) # set column width to fit contents self.tv.resizeColumnsToContents() # set row height nrows = len(self.tabledata) for row in xrange(nrows): self.tv.setRowHeight(row, 18) # enable sorting self.tv.setSortingEnabled(True) class MyTableModel(QAbstractTableModel): def __init__(self, datain, headerdata, parent=None, *args): """ datain: a list of lists headerdata: a list of strings """ QAbstractTableModel.__init__(self, parent, *args) self.arraydata = datain self.headerdata = headerdata def rowCount(self, parent): return len(self.arraydata) def columnCount(self, parent): return len(self.arraydata[0]) def data(self, index, role): if not index.isValid(): return QVariant() elif role != Qt.DisplayRole: return QVariant() return QVariant(self.arraydata[index.row()][index.column()]) def headerData(self, col, orientation, role): if orientation == Qt.Horizontal and role == Qt.DisplayRole: return QVariant(self.headerdata[col]) return QVariant() def sort(self, Ncol, order): """Sort table by given column number. """ self.emit(SIGNAL("layoutAboutToBeChanged()")) self.arraydata = sorted(self.arraydata, key=operator.itemgetter(Ncol)) if order == Qt.DescendingOrder: self.arraydata.reverse() self.emit(SIGNAL("layoutChanged()")) if __name__ == "__main__": main()


Eso resultó ser más fácil de lo que pensaba. Simplemente agregando esta fila hace que la selección sea por fila en lugar de celda.

self.tv.setSelectionBehavior(QAbstractItemView.SelectRows)