我需要在python中实现一个函数,当按下“ctrl + v”时它处理“粘贴”。我有QTableView
,我需要复制表格的一个字段并将其粘贴到表格的另一个字段中。我尝试了下面的代码,但问题是我不知道如何在tableView中读取复制的项目(从剪贴板)。 (因为它已经复制了该字段,我可以将其粘贴到其他任何地方,如记事本)。以下是我尝试过的代码的一部分:
class Widget(QWidget):
def __init__(self,md,parent=None):
QWidget.__init__(self,parent)
# initially construct the visible table
self.tv=QTableView()
self.tv.show()
# set the shortcut ctrl+v for paste
QShortcut(QKeySequence('Ctrl+v'),self).activated.connect(self._handlePaste)
self.layout = QVBoxLayout(self)
self.layout.addWidget(self.tv)
# paste the value
def _handlePaste(self):
if self.tv.copiedItem.isEmpty():
return
stream = QDataStream(self.tv.copiedItem, QIODevice.ReadOnly)
self.tv.readItemFromStream(stream, self.pasteOffset)
答案 0 :(得分:4)
您可以使用QApplication
从应用的QApplication.clipboard()
实例获取剪贴板,并且从返回的QClipboard
对象中,您可以获取文字,图片,哑剧数据等。是一个例子:
import PyQt4.QtGui as gui
class Widget(gui.QWidget):
def __init__(self,parent=None):
gui.QWidget.__init__(self,parent)
# initially construct the visible table
self.tv=gui.QTableWidget()
self.tv.setRowCount(1)
self.tv.setColumnCount(1)
self.tv.show()
# set the shortcut ctrl+v for paste
gui.QShortcut(gui.QKeySequence('Ctrl+v'),self).activated.connect(self._handlePaste)
self.layout = gui.QVBoxLayout(self)
self.layout.addWidget(self.tv)
# paste the value
def _handlePaste(self):
clipboard_text = gui.QApplication.instance().clipboard().text()
item = gui.QTableWidgetItem()
item.setText(clipboard_text)
self.tv.setItem(0, 0, item)
print clipboard_text
app = gui.QApplication([])
w = Widget()
w.show()
app.exec_()
注意:我使用了QTableWidget
因为我没有可以使用QTableView
的模型,但您可以根据需要调整示例。