<p id="m2nkj"><option id="m2nkj"><big id="m2nkj"></big></option></p>
    <strong id="m2nkj"></strong>
    <ruby id="m2nkj"></ruby>

    <var id="m2nkj"></var>
  • Python Qt GUI設(shè)計:QDrag拖拽數(shù)據(jù)傳輸類(基礎(chǔ)篇—18)

    共 2163字,需瀏覽 5分鐘

     ·

    2021-12-12 11:24

    點擊上方藍(lán)色字體,關(guān)注我們


    為用戶提供的拖曳功能很直觀,在很多桌面應(yīng)用程序中,復(fù)制或移動對象都可以通過拖曳來完成。


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



    MIME(Multipurpose Internet Mail Extension,多用途互聯(lián)網(wǎng)郵件擴展類型)是設(shè)定某種擴展名的文件用一種應(yīng)用程序來打開的方式類型,當(dāng)該擴展名文件被訪問時,瀏覽器會自動使用指定的應(yīng)用程序來打開,多用于指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。

    每種MIME類型都由兩部分組成,前面是數(shù)據(jù)的大類別,如聲音audio、圖像image等,后面定義具體的種類。

    常見的MIME類型(通用型)如下:

    • 超文本標(biāo)記語言文本 .html text/html

    • xml文檔 .xml text/xml

    • XHTML文檔 .xhtml application/xhtml+xml

    • 普通文本 .txt text/plain

    • RTF文本 .rtf application/rtf

    • PDF文檔 .pdf application/pdf

    • Microsoft Word文件 .word application/msword

    • PNG圖像 .png image/png

    • GIF圖形 .gif image/gif

    • JPEG圖形 .jpeg,.jpg image/jpeg

    • au聲音文件 .au audio/basic

    • MIDI音樂文件 mid,.midi audio/midi,audio/x-midi

    • RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio

    • MPEG文件 .mpg,.mpeg video/mpeg

    • AVI文件 .avi video/x-msvideo

    • GZIP文件 .gz application/x-gzip

    • TAR文件 .tar application/x-tar

    • 任意的二進制數(shù)據(jù) application/octet-stream



    如下表所示的MimeData類函數(shù)允許檢測和使用方便的MIME類型:



    許多QWidget對象都支持拖曳動作,允許拖曳數(shù)據(jù)的控件必須設(shè)置QWidget.setDragEnabled()為True。另外,控件應(yīng)該響應(yīng)拖曳事件,以便存儲所拖曳的數(shù)據(jù)。常用的拖曳事件如下表所示:



    通個示例了解QDrag拖拽數(shù)據(jù)傳輸類,示例效果如下所示:



    示例中,DragEnterEvent會驗證事件的MIME數(shù)據(jù)是否包含字符串文本,如果包含字符串文本,就接收事件提出的添加文本操作,并將文本作為新條目(ltem)添加到ComboBox控件中,否則忽略此次操作。


    實現(xiàn)代碼如下所示:


    import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *
    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) ex = Example() ex.show() sys.exit(app.exec_())


    往期推薦



    點擊閱讀原文,更精彩~
    瀏覽 57
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    <p id="m2nkj"><option id="m2nkj"><big id="m2nkj"></big></option></p>
    <strong id="m2nkj"></strong>
    <ruby id="m2nkj"></ruby>

    <var id="m2nkj"></var>
  • 无码三| 国产精品久久久久久久久久两年半 | 九哥操逼视频网 | 国产区视频在线观看 | 7777视频 | 可以免费观看的黄色视频 | 俺来俺来也www色官网 | 久久久久久久国产精品 | 偷拍久久久| 日美女逼一级片 |