前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt 剪切板的使用

PyQt 剪切板的使用

作者头像
用户6021899
发布2019-08-14 16:45:16
2.2K0
发布2019-08-14 16:45:16
举报

PyQt 中的 QApplication 的 clipboard() 方法会返回一个剪切板对象。通过这个对象可以向剪切板或者从剪切板进行文本,图片或者其他数据的写入和读出。

代码语言:javascript
复制
clipboard = QApplication.clipboard()#创建剪切板对象
clipboard.setText() #用于向剪切板写入文本
clipboard.setPixmap()#用于向剪切板写入图片
clipboard.text()#用于从剪切板读出文本
clipboard.pixmap()#用于从剪切板读出图片

QApplication.clipboard()返回的是操作系统的全局剪切板,我们通过它拷贝其它应用程序的数据,如Excel的单元格数据(本质上是字符串,各个单元格字符串之间以制表键分隔)和图表。

如果要通过剪切板操作Html文本,或者自定义数据,就还要使用到

QMimeData对象。下面以Html为例进行讲解,关于自定义数据的操作请再参考《PyQt拖放事件(二)》。

代码语言:javascript
复制
#写到剪切板
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)

注意,剪切板通常每次只能保存一个对象,因此,如果对齐写入一个字符串,接着再写入一张图片,之前写入的字符串就被图片给覆盖掉了。

完整示例代码如下:

代码语言:javascript
复制
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_())
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档