从pyqt4中的QTableView复制/粘贴多个项目?

发布于 2021-01-29 16:51:31

我们可以通过选择QTableView中的多个项目(部分行和部分列)self.tableView.setSelectionMode(QAbstractItemView.ExtendedSelection),但选择一些行和列(部分和部分),如果我做以后CTRL+
C,并将其粘贴到记事本只(从的tableView一个值)粘贴一个项目?

我的代码:

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

我们如何复制和粘贴多个项目?

关注者
0
被浏览
159
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    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())
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看