在QTableVi字段中粘贴

2024-04-18 19:17:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: the函数代码selfinit粘贴deftv
1条回答
网友
1楼 · 发布于 2024-04-18 19:17:54

您可以使用QApplication.clipboard()从应用程序的QApplication实例获取剪贴板,并从返回的QClipboard对象中获取文本、图像、mime数据等。下面是一个示例:

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一起使用,但是您可以根据您的需要调整示例。在

相关问题 更多 >