應(yīng)用之間交換數(shù)據(jù)除了可以使用拖放技術(shù)外,還可使用剪貼板,。一個應(yīng)用把數(shù)據(jù)放到剪貼板,,另一個應(yīng)用從剪貼板中提出數(shù)據(jù)。 QClipboard簡介QClipboard類提供了對系統(tǒng)剪切板的訪問,,可以在應(yīng)用程序之間復(fù)制和粘貼數(shù)據(jù),,它的操作類似于QDrag類,并使用類似的數(shù)據(jù)結(jié)構(gòu),。 獲取對全局剪貼板對象的引用,,可使用QAppiication類的靜態(tài)方法: clipboard = QAppiication.clipboard() 任何類型的MimeData都可以從剪切板復(fù)制或粘貼。 QClipboard類的常用方法: clipboard.setImage (QtGui.QImage ("image.jpg"))
- image (): 返回一個QImage對象
<>類圖像放置到剪貼板,。如:map): 將QPixmap(img : QPixmaptPixi>se
clipboard.setPixmap (QtGui.QPixmap ("image, jpg"))
- pixmap(): 返回一個QImage對象。
<>- clear(): 清空剪貼板數(shù)據(jù),。
- mimeData() : 返回一個QMimeData對象,。
tMimeData(data :QMimeData): 將MimeData類型數(shù)據(jù)放置到剪貼板。QMimeData 類可以存放任意類型的數(shù)據(jù),。i>se
QClipboard類中的常用信號: - dataChanged(): 當(dāng)剪切板內(nèi)容發(fā)生變化時,,發(fā)射這個信號。
測試QClipboard測試代碼中測試復(fù)制普通文本,,HTML文本和圖像三種方式,,粘貼使用QMimeData進(jìn)行格式判斷,輸出相應(yīng)信息,,因此粘貼功能也支持從其他應(yīng)用中的數(shù)據(jù)拷貝粘貼操作,,比如從notepad記事本中復(fù)制文本或者從mspaint繪圖板中復(fù)制圖像粘貼到窗口中,。完整代碼如下: import sys,os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt, QMimeData
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import (QApplication, QMainWindow, QFrame, QLabel,
QMenuBar, QMenu, QAction)
class DemoClipboard(QMainWindow):
def __init__(self, parent=None):
super(DemoClipboard, self).__init__(parent)
# 設(shè)置窗口標(biāo)題
self.setWindowTitle('實(shí)戰(zhàn)PyQt5: QClipBoard 剪貼板演示')
# 設(shè)置窗口大小
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('復(fù)制文本', self)
aCopyText.triggered.connect(self.onCopyText)
aCopyHtml = QAction('復(fù)制Html文本', self)
aCopyHtml.triggered.connect(self.onCopyHtml)
aCopyImage = QAction('復(fù)制圖像',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):
#設(shè)置剪貼板文本
clipboard = QApplication.clipboard()
clipboard.setText('這是一段剪貼板文本')
def onCopyHtml(self):
mimeData = QMimeData()
mimeData.setHtml("<b>Bold and <font color=red>Red</font></b>")
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())
運(yùn)行效果如下圖: 剪貼板操作測試 本文知識點(diǎn)- 剪貼板操作和拖放操作的技術(shù)實(shí)現(xiàn)類似。
- 使用剪貼板粘貼普通文本,。
- 使用剪貼板粘貼HTML文本,。
- 使用剪貼板粘貼圖像。
|