日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Python?PyQt5實(shí)現(xiàn)拖拽與剪貼板功能詳解_python

作者:SongYuLong的博客 ? 更新時間: 2022-12-29 編程語言

拖拽

基于MIME類型的拖拽數(shù)據(jù)傳輸時基于QDrag類的QMimeData對象管理的數(shù)據(jù)與其對應(yīng)的MIME類型相關(guān)聯(lián)。

MimeData類函數(shù)允許檢測和使用方法的MIME類型

判斷函數(shù) 設(shè)置函數(shù) 獲取函數(shù) 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 當(dāng)執(zhí)行一個拖拽控件操作,并且鼠標(biāo)指針進(jìn)入該控件時被觸發(fā)
DragMoveEvent 在拖拽操作進(jìn)行時會觸發(fā)該事件
DragLeaveEvent 當(dāng)執(zhí)行一個拖拽控件操作,并且鼠標(biāo)指針離開該控件時被觸發(fā)
DropEvent 當(dāng)拖拽操作在目標(biāo)控件上被釋放時,觸發(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)剪貼板的訪問,可以在應(yīng)用程序之間復(fù)制和粘貼數(shù)據(jù)。它的操作類似于QDrag類,并使用類似的數(shù)據(jù)類型。

QApplication類有一個靜態(tài)方法clipboard(),返回剪貼板對象的引用。任何類型的MimeData都可以從剪貼板復(fù)制或粘貼。

QClipboard常用方法

方法 描述
clear() 清除剪貼板的內(nèi)容
setImage() 將QImage對象復(fù)制到剪貼板中
setMimeData() 將MIME數(shù)據(jù)設(shè)置為剪貼板
setPixmap() 從剪貼板中復(fù)制Pixmap對象
setText() 從剪貼板中復(fù)制文本
text() 從剪貼板中檢索文本

QClipboard類中的常用信號

信號 含義
dataChanged 當(dāng)剪貼板內(nèi)容發(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_())

原文鏈接:https://blog.csdn.net/songyulong8888/article/details/127986260

欄目分類
最近更新