2016-10-24 3 views
1

Wir können mehrere Elemente (Teil Zeilen und Teilspalten) wählen Sie aus QTableView self.tableView.setSelectionMode(QAbstractItemView.ExtendedSelection) verwenden, aber nach ein paar Zeilen und Spalten der Auswahl (teilweise und teilweise), wenn ich CTRL + C und es in Notepad fügen Sie fügt nur ein Element (ein Wert aus der TabelleView)?Kopieren/Einfügen mehrerer Elemente aus QTableView in pyqt4?

Mein Code:

tab_table_view = QtGui.QWidget() 
self.Tab.insertTab(0, tab_table_view, self.File_Name) 
self.tableView = QtGui.QTableView(tab_table_view) 
self.tableView.setGeometry(QtCore.QRect(0, 0, 721, 571)) 
self.model = QtGui.QStandardItemModel(self) 
self.model.setSortRole(QtCore.Qt.UserRole) 
self.tableView.setModel(self.model) 

    self.tableView.setSelectionMode(QAbstractItemView.ExtendedSelection) '''this helps for selecting multiple items but not able to copy and paste multiple values to a text/ excel (it only copies single value)''' 

Wie können wir mehrere Elemente Sie kopieren und einfügen?

Antwort

2
self.tableView.installEventFilters(self) 

Jetzt verwenden können, Ereignisfilter hinzufügen:

def eventFilter(self, source, event): 
     if (event.type() == QtCore.QEvent.KeyPress and 
      event.matches(QtGui.QKeySequence.Copy)): 
      self.copySelection() 
      return True 
     return super(Window, self).eventFilter(source, event) 

Copy Funktion:

def copySelection(self): 
     selection = self.tableView.selectedIndexes() 
     if selection: 
      rows = sorted(index.row() for index in selection) 
      columns = sorted(index.column() for index in selection) 
      rowcount = rows[-1] - rows[0] + 1 
      colcount = columns[-1] - columns[0] + 1 
      table = [[''] * colcount for _ in range(rowcount)] 
      for index in selection: 
       row = index.row() - rows[0] 
       column = index.column() - columns[0] 
       table[row][column] = index.data() 
      stream = io.StringIO() 
      csv.writer(stream).writerows(table) 
      QtGui.qApp.clipboard().setText(stream.getvalue()) 

von ekhumoro beantwortet, für die gleiche Frage wieder gefragt.

1

QAbstractItemView.ExtendedSelection Wenn der Benutzer ein Element in der üblichen Art und Weise auswählt, wird die Auswahl gelöscht und das neue Element ausgewählt. Wenn der Benutzer jedoch die Strg-Taste drückt, während er auf ein Objekt klickt, wird das angeklickte Objekt umgeschaltet und alle anderen Objekte bleiben unberührt. Wenn der Benutzer die Shift-Taste drückt, während er auf ein Element klickt, werden alle Elemente zwischen dem aktuellen Element und dem angeklickten Element ausgewählt oder deaktiviert, abhängig vom Status des angeklickten Elements. Mehrere Elemente können ausgewählt werden, indem Sie mit der Maus darüber fahren. Sie auch

QAbstractItemView.MultiSelection 
+1

Danke für die Antwort, aber ich bin nicht für mehrere Auswahlen, sondern für das Kopieren und Einfügen von einzelnen Auswahl mehrerer Elemente. – learncode

+1

Können Sie die Auswahl kopieren und einfügen? – learncode

Verwandte Themen