粘贴在QTableView的字段中

时间:2014-02-10 16:13:59

标签: python qt pyqt paste qtableview

我需要在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)

1 个答案:

答案 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的模型,但您可以根据需要调整示例。