Python 粘贴到QTableView的字段中
我需要在python中实现一个函数,在按下“ctrl+v”时处理“粘贴”。我有一个Python 粘贴到QTableView的字段中,python,qt,pyqt,paste,qtableview,Python,Qt,Pyqt,Paste,Qtableview,我需要在python中实现一个函数,在按下“ctrl+v”时处理“粘贴”。我有一个QTableView,我需要复制表的一个字段并将其粘贴到表的另一个字段。我尝试了以下代码,但问题是我不知道如何在tableView中读取复制的项目(从剪贴板)。(因为它已经复制了字段,我可以将其粘贴到其他任何地方,就像一个记事本一样)。以下是我尝试过的部分代码: class Widget(QWidget): def __init__(self,md,parent=None): QWidget.__init__(
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)
您可以使用
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
的模型,但是您可以根据需要调整示例。AttributeError:'QTableView'对象没有属性'setItem'。您阅读了最后的说明了吗?我使用了QTableWidget
而不是QTableView
也检查代码;)@(有些人忘记接受答案;)在任何情况下,你都可以直接问OP。。。也许他/她还有另一个原因:D