当前位置:   article > 正文

pyqt5 设置qframe 颜色_实战PyQt5: 101-使用剪贴板

pyqt5 qframe颜色设置
2ec16e240ec6b7747cdf30e5c9a4e701.png

应用之间交换数据除了可以使用拖放技术外,还可使用剪贴板。一个应用把数据放到剪贴板,另一个应用从剪贴板中提出数据。

QClipboard简介

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(400300)              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())

运行效果如下图:

3113e96ac22315ecfa9d75d976aaa46c.gif

剪贴板操作测试

本文知识点

  • 剪贴板操作和拖放操作的技术实现类似。
  • 使用剪贴板粘贴普通文本。
  • 使用剪贴板粘贴HTML文本。
  • 使用剪贴板粘贴图像。

喜欢本文内容就关注, 收藏,点赞,评论和转发。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/652956
推荐阅读
相关标签
  

闽ICP备14008679号