<p>这是我创建的一个QAction,用于将选定单元格复制到剪贴板。
基本上,当初始化QAction时,您会向它传递一个绑定到的表小部件。触发操作时,将获取选定的单元格,将其排序为行和列,并将文本复制到剪贴板。</p>
<pre><code>class CopySelectedCellsAction(QtGui.QAction):
def __init__(self, table_widget):
if not isinstance(table_widget, QtGui.QTableWidget):
raise ValueError(str('CopySelectedCellsAction must be initialised with a QTableWidget. A %s was given.' % type(table_widget)))
super(CopySelectedCellsAction, self).__init__("Copy", table_widget)
self.setShortcut('Ctrl+C')
self.triggered.connect(self.copy_cells_to_clipboard)
self.table_widget = table_widget
def copy_cells_to_clipboard(self):
if len(self.table_widget.selectionModel().selectedIndexes()) > 0:
# sort select indexes into rows and columns
previous = self.table_widget.selectionModel().selectedIndexes()[0]
columns = []
rows = []
for index in self.table_widget.selectionModel().selectedIndexes():
if previous.column() != index.column():
columns.append(rows)
rows = []
rows.append(index.data())
previous = index
columns.append(rows)
print columns
# add rows and columns to clipboard
clipboard = ""
nrows = len(columns[0])
ncols = len(columns)
for r in xrange(nrows):
for c in xrange(ncols):
clipboard += columns[c][r]
if c != (ncols-1):
clipboard += '\t'
clipboard += '\n'
# copy to the system clipboard
sys_clip = QtGui.QApplication.clipboard()
sys_clip.setText(clipboard)
</code></pre>