Python PyQt5實現(xiàn)拖拽與剪貼板功能詳解
拖拽
基于MIME類型的拖拽數據傳輸時基于QDrag類的QMimeData對象管理的數據與其對應的MIME類型相關聯(lián)。
MimeData類函數允許檢測和使用方法的MIME類型
| 判斷函數 | 設置函數 | 獲取函數 | MIME類型 |
|---|---|---|---|
| hasText() | text() | setText() | text/plain |
| hasHtml() | html() | setHtml() | text/html |
| hasUrls() | urls() | setUrls() | text/uri-list |
| hasImage() | imageData() | setImageData() | image/* |
| hasColor() | colorData() | setColorData() | application/x-color |
常用拖拽事件
| 事件 | 描述 |
|---|---|
| DragEnterEvent | 當執(zhí)行一個拖拽控件操作,并且鼠標指針進入該控件時被觸發(fā) |
| DragMoveEvent | 在拖拽操作進行時會觸發(fā)該事件 |
| DragLeaveEvent | 當執(zhí)行一個拖拽控件操作,并且鼠標指針離開該控件時被觸發(fā) |
| DropEvent | 當拖拽操作在目標控件上被釋放時,觸發(fā)該事件 |
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class Combo(QComboBox):
def __init__(self, title, parent):
super(Combo, self).__init__(parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
print(e)
if e.mimeData().hasText():
e.accept()
else:
e.ignore()
def dropEvent(self, e):
self.addItem(e.mimeData().text())
class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
lo = QFormLayout()
lo.addRow(QLabel("請把左邊的文本拖拽到右邊的下拉菜單中"))
edit = QLineEdit()
edit.setDragEnabled(True)
com = Combo("Button", self)
lo.addRow(edit, com)
self.setLayout(lo)
self.setWindowTitle("簡單的拖拽例子")
if __name__ == "__main__":
app = QApplication(sys.argv)
win = Example()
win.show()
sys.exit(app.exec_())
剪貼板
QClipboard類提供了對系統(tǒng)剪貼板的訪問,可以在應用程序之間復制和粘貼數據。它的操作類似于QDrag類,并使用類似的數據類型。
QApplication類有一個靜態(tài)方法clipboard(),返回剪貼板對象的引用。任何類型的MimeData都可以從剪貼板復制或粘貼。
QClipboard常用方法
| 方法 | 描述 |
|---|---|
| clear() | 清除剪貼板的內容 |
| setImage() | 將QImage對象復制到剪貼板中 |
| setMimeData() | 將MIME數據設置為剪貼板 |
| setPixmap() | 從剪貼板中復制Pixmap對象 |
| setText() | 從剪貼板中復制文本 |
| text() | 從剪貼板中檢索文本 |
QClipboard類中的常用信號
| 信號 | 含義 |
|---|---|
| dataChanged | 當剪貼板內容發(fā)生變化時觸發(fā)該信號 |
import os
import sys
from PyQt5.QtCore import QMimeData
from PyQt5.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, QPushButton)
from PyQt5.QtGui import QPixmap
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
textCopyButton = QPushButton("&Copy Text")
textPasteButton = QPushButton("Paste &Text")
htmlCopyButton = QPushButton("C&opy HTML")
htmlPasteButton = QPushButton("Paste &HTML")
imageCopyButton = QPushButton("Co&py Image")
imagePasteButton = QPushButton("Paste &Image")
self.textLabel = QLabel("Original text")
self.imageLabel = QLabel()
self.imageLabel.setPixmap(QPixmap(os.path.join(os.path.dirname(__file__), "images/clock.png")))
layout = QGridLayout()
layout.addWidget(textCopyButton, 0, 0)
layout.addWidget(imageCopyButton, 0, 1)
layout.addWidget(htmlCopyButton, 0, 2)
layout.addWidget(textPasteButton, 1, 0)
layout.addWidget(imagePasteButton, 1, 1)
layout.addWidget(htmlPasteButton, 1, 2)
layout.addWidget(self.textLabel, 2, 0, 1, 2)
layout.addWidget(self.imageLabel, 2, 2)
self.setLayout(layout)
textCopyButton.clicked.connect(self.copyText)
textPasteButton.clicked.connect(self.pasteText)
imageCopyButton.clicked.connect(self.copyImage)
imagePasteButton.clicked.connect(self.pasteImage)
htmlCopyButton.clicked.connect(self.copyHtml)
htmlPasteButton.clicked.connect(self.pasteHtml)
def copyText(self):
print(os.path.join(os.path.dirname(__file__)))
clipboard = QApplication.clipboard()
clipboard.setText("I've been clipped")
def pasteText(self):
clipboard = QApplication.clipboard()
self.textLabel.setText(clipboard.text())
def copyImage(self):
clipboard = QApplication.clipboard()
clipboard.setPixmap(QPixmap(os.path.join(os.path.dirname(__file__), "images/python.jpg")))
def pasteImage(self):
clipboard = QApplication.clipboard()
self.imageLabel.setPixmap(clipboard.pixmap())
def copyHtml(self):
mimeData = QMimeData()
mimeData.setHtml("<b>Bold and<font color=red>Red</font></b>")
clipboard = QApplication.clipboard()
clipboard.setMimeData(mimeData)
def pasteHtml(self):
clipboard = QApplication.clipboard()
mimeData = clipboard.mimeData()
if mimeData.hasHtml():
self.textLabel.setText(mimeData.html())
if __name__ == "__main__":
app = QApplication(sys.argv)
win = Form()
win.show()
sys.exit(app.exec_())

到此這篇關于Python PyQt5實現(xiàn)拖拽與剪貼板功能詳解的文章就介紹到這了,更多相關PyQt5拖拽 剪貼板內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python XlsxWriter模塊創(chuàng)建aexcel表格的實例講解
今天小編就為大家分享一篇python XlsxWriter模塊創(chuàng)建aexcel表格的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05

