实战PyQt5: 101-使用剪贴板


实战PyQt5: 101-使用剪贴板文章插图
应用之间交换数据除了可以使用拖放技术外 , 还可使用剪贴板 。 一个应用把数据放到剪贴板 , 另一个应用从剪贴板中提出数据 。
QClipboard简介【实战PyQt5: 101-使用剪贴板】QClipboard类提供了对系统剪切板的访问 , 可以在应用程序之间复制和粘贴数据 , 它的操作类似于QDrag类 , 并使用类似的数据结构 。
获取对全局剪贴板对象的引用 , 可使用QAppiication类的静态方法: clipboard = QAppiication.clipboard()
任何类型的MimeData都可以从剪切板复制或粘贴 。
QClipboard类的常用方法:

  • setText( text :str):将文本放置到剪贴板 。
  • text():返回剪贴板中的文本或空字符串 。
  • text (type):返回一个包括两个成员的元组 。 第一个成员为剪贴板中的文本;第二个为文本的类型 。 参数可以为 "plain", "html" (HTML), 空字符串(任意类型) 。
  • setImage ( img :QImage): 将QImage类图像放置到剪贴板 。 如:
clipboard.setImage (QtGui.QImage ("image.jpg"))
  • image (): 返回一个QImage对象
  • setPixmap(img : QPixmap): 将QPixmap类图像放置到剪贴板 。 如:
clipboard.setPixmap (QtGui.QPixmap ("image, jpg"))
  • pixmap(): 返回一个QImage对象 。
  • setMimeData(data :QMimeData): 将MimeData类型数据放置到剪贴板 。 QMimeData 类可以存放任意类型的数据 。
  • mimeData() : 返回一个QMimeData对象 。
  • clear(): 清空剪贴板数据 。
QClipboard类中的常用信号:
  • dataChanged(): 当剪切板内容发生变化时 , 发射这个信号 。
测试QClipboard测试代码中测试复制普通文本 , HTML文本和图像三种方式 , 粘贴使用QMimeData进行格式判断 , 输出相应信息 , 因此粘贴功能也支持从其他应用中的数据拷贝粘贴操作 , 比如从notepad记事本中复制文本或者从mspaint绘图板中复制图像粘贴到窗口中 。 完整代码如下:
import sys,osfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtCore import Qt, QMimeDatafrom PyQt5.QtGui import QPixmapfrom PyQt5.QtWidgets import (QApplication, QMainWindow, QFrame, QLabel,QMenuBar, QMenu, QAction) class DemoClipboard(QMainWindow):def __init__(self, parent=None):super(DemoClipboard, self).__init__(parent)# 设置窗口标题self.setWindowTitle('实战PyQt5: QClipBoard 剪贴板演示')# 设置窗口大小self.resize(400, 300)self.initUi()self.clipType=''def initUi(self):self.initMenu()self.showBox = QLabel()self.showBox.setFrameShape(QFrame.Box)self.showBox.setLineWidth(1)self.showBox.setAlignment(Qt.AlignCenter)self.setCentralWidget(self.showBox)def initMenu(self):mBar = self.menuBar()#文件菜单menuFile = mBar.addMenu('文件')#退出aExit = QAction('退出', self)aExit.triggered.connect(self.close)menuFile.addAction(aExit)#编辑菜单menuEdit = mBar.addMenu('编辑')aCopyText = QAction('复制文本', self)aCopyText.triggered.connect(self.onCopyText)aCopyHtml = QAction('复制Html文本', self)aCopyHtml.triggered.connect(self.onCopyHtml)aCopyImage = QAction('复制图像',self)aCopyImage.triggered.connect(self.onCopyImage)aPaste = QAction('粘贴', self)aPaste.triggered.connect(self.onPaste)menuEdit.addAction(aCopyText)menuEdit.addAction(aCopyHtml)menuEdit.addAction(aCopyImage)menuEdit.addSeparator()menuEdit.addAction(aPaste)def onCopyText(self):#设置剪贴板文本clipboard = QApplication.clipboard()clipboard.setText('这是一段剪贴板文本')def onCopyHtml(self):mimeData = http://kandian.youth.cn/index/QMimeData()mimeData.setHtml("Bold and