2016-10-24 134 views
1

我們可以使用self.tableView.setSelectionMode(QAbstractItemView.ExtendedSelection)選擇QTableView中的多個項目(部分行和部分列),但選擇一些行,如果我做CTRL + Ç列(部分和部分)後,並將其粘貼在記事本只貼一個item(tableView中的一個值)?在pyqt4中複製/粘貼QTableView中的多個項目?

我的代碼:

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)''' 

我們該怎麼辦複製和粘貼多個項目?

回答

2
self.tableView.installEventFilters(self) 

現在,添加事件過濾器:

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) 

複印功能:

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()) 

通過ekhumoro回答,再次問同樣的問題。

1

QAbstractItemView.ExtendedSelection 當用戶以通常方式選擇一個項目時,選擇被清除並且選擇新項目。但是,如果用戶在點擊某個項目時按下了Ctrl鍵,被點擊的項目會被切換,並且所有其他項目都會保留未觸及。如果用戶在按下Shift鍵的同時點擊項目,則當前項目和點擊項目之間的所有項目都將被選中或取消選定,具體取決於點擊項目的狀態。通過拖動鼠標可以選擇多個項目。 你也可以使用

QAbstractItemView.MultiSelection 
+1

感謝您的回答,但我不是要求多個選擇,而是複製和粘貼多個項目的單個選擇。 – learncode

+1

你可以複製和粘貼選擇嗎? – learncode