赞
踩
应用之间交换数据除了可以使用拖放技术外,还可使用剪贴板。一个应用把数据放到剪贴板,另一个应用从剪贴板中提出数据。
QClipboard类提供了对系统剪切板的访问,可以在应用程序之间复制和粘贴数据,它的操作类似于QDrag类,并使用类似的数据结构。
获取对全局剪贴板对象的引用,可使用QAppiication类的静态方法:
clipboard = QAppiication.clipboard()
任何类型的MimeData都可以从剪切板复制或粘贴。
QClipboard类的常用方法:
clipboard.setImage (QtGui.QImage ("image.jpg"))
clipboard.setPixmap (QtGui.QPixmap ("image, jpg"))
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 = QMimeData() mimeData.setHtml("Bold and ") clipboard = QApplication.clipboard() clipboard.setMimeData(mimeData) def onCopyImage(self): clipboard = QApplication.clipboard() clipboard.setPixmap(QPixmap(os.path.dirname(__file__) + "/python-logo.png")) def onPaste(self): clipboard = QApplication.clipboard() mimeData = clipboard.mimeData() print(mimeData.formats()) if mimeData.hasFormat('text/plain'): self.showBox.setText(clipboard.text()) #也可以使用下面方式 #self.showBox.setText(mimeData.text()) elif mimeData.hasHtml(): self.showBox.setText(mimeData.html()) elif mimeData.hasFormat('application/x-qt-image'): self.showBox.setPixmap(clipboard.pixmap()) if __name__ == '__main__': app = QApplication(sys.argv) window = DemoClipboard() window.show() sys.exit(app.exec())
运行效果如下图:
喜欢本文内容就关注, 收藏,点赞,评论和转发。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。