PyQt 中的 QApplication 的 clipboard() 方法会返回一个剪切板对象。通过这个对象可以向剪切板或者从剪切板进行文本,图片或者其他数据的写入和读出。
clipboard = QApplication.clipboard()#创建剪切板对象
clipboard.setText() #用于向剪切板写入文本
clipboard.setPixmap()#用于向剪切板写入图片
clipboard.text()#用于从剪切板读出文本
clipboard.pixmap()#用于从剪切板读出图片
QApplication.clipboard()返回的是操作系统的全局剪切板,我们通过它拷贝其它应用程序的数据,如Excel的单元格数据(本质上是字符串,各个单元格字符串之间以制表键分隔)和图表。
如果要通过剪切板操作Html文本,或者自定义数据,就还要使用到
QMimeData对象。下面以Html为例进行讲解,关于自定义数据的操作请再参考《PyQt拖放事件(二)》。
#写到剪切板
mimeData = QMimeData()
mimeData.setHtml("<b>Bold and <font color=red>Red</font></b>")
clipboard = QApplication.clipboard()
clipboard.setMimeData(mimeData)
#从剪切板读出
clipboard = QApplication.clipboard()
mimeData = clipboard.mimeData()
if mimeData.hasHtml():
self.label.setText(mimeData.html)
注意,剪切板通常每次只能保存一个对象,因此,如果对齐写入一个字符串,接着再写入一张图片,之前写入的字符串就被图片给覆盖掉了。
完整示例代码如下:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPixmap, QImage,QIcon
from PyQt5.QtCore import Qt, pyqtSignal
class ClipboardExample(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
layout = QGridLayout()
self.tb0 = QTextBrowser()
self.tb0.setPlainText("123465789")
self.tb1 = QTextBrowser()
self.tb1.setPlainText("asdfghjkl")
#self.tb1.setText("xxxxxxxxxx")#also OK
self.lb0 = QLabel()
pix0 = QPixmap("monkey.jpg").scaled(300,200)
self.lb0.setPixmap(pix0)
self.lb1 = QLabel()
pix1 = QPixmap("森林.jpg").scaled(300,200)
self.lb1.setPixmap(pix1)
layout.addWidget(self.tb0, 0, 0)
layout.addWidget(self.lb0, 1, 0)
layout.addWidget(self.tb1, 0, 1)
layout.addWidget(self.lb1, 1, 1)
self.setLayout(layout)
self.createActions()
self.setWindowIcon(QIcon("monkey.jpg"))
self.setWindowTitle("剪切板使用")
self.setMinimumSize(400,400)
def createActions(self):
copyAction = QAction(self)
copyAction.setShortcut("Ctrl+C")
copyAction.triggered.connect(self.copyData)
pastAction = QAction(self)
pastAction.setShortcut("Ctrl+V")
pastAction.triggered.connect(self.pasteData)
self.addActions((copyAction, pastAction))#Activate QAction
def copyData(self):
clipboard = QApplication.clipboard()
#clipboard.setPixmap(self.lb0.pixmap())#用于复制图片
clipboard.setText(self.tb0.toPlainText())# or toHtml()#用于复制文本
print("copied to clipboard")
def pasteData(self):
clipboard = QApplication.clipboard()
#self.lb1.setPixmap(clipboard.pixmap())#用于粘贴图片
self.tb1.setText(clipboard.text())#用于粘贴文本
print("pasted from clipboard")
app = QApplication(sys.argv)
clipboardExample = ClipboardExample()
clipboardExample.show()
sys.exit(app.exec_())
本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!