怎么在python中使用Drag與Drop控件-創(chuàng)新互聯(lián)

本篇文章為大家展示了怎么在python中使用Drag與Drop控件,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計(jì),鳳慶網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:鳳慶等地區(qū)。鳳慶做網(wǎng)站價(jià)格咨詢:18980820575

PyQt5數(shù)據(jù)拖曳Drag與Drop介紹

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

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

MIME意為多功能Internet郵件擴(kuò)展,它設(shè)計(jì)的最初目的是為了在發(fā)送電子郵件時(shí)附加多媒體數(shù)據(jù),讓郵件客戶程序能根據(jù)其類型進(jìn)行處理。然而當(dāng)它被HTTP協(xié)議支持之后,它的意義就更為顯著了。它使得HTTP傳輸?shù)牟粌H是普通的文本,而變得豐富多彩。

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

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

超文本標(biāo)記語(yǔ)言文本 .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音樂(lè)文件 mid,.midi audio/midi,audio/x-midi

RealAudio音樂(lè)文件 .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

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

MIME類型的數(shù)據(jù)可以簡(jiǎn)單的理解為互聯(lián)網(wǎng)上的各種資源,比如文本,音頻和圖片等資源,互聯(lián)網(wǎng)上的每一種資源都屬于一種MIME類型的數(shù)據(jù)

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

判斷函數(shù)設(shè)置函數(shù)獲取函數(shù)MIME類型
hasText()text()setText()text/plain
hasHtml()html()setHtml()text/html
hasUrls()urls()setUrls()text/url-list
hasImage()imageData()setImageDataimage/*
hasColor()colorData()setColrDaata()application/x-color

許多QWidget對(duì)象都支持拖曳動(dòng)作,允許拖曳數(shù)據(jù)的控件必須設(shè)置QWidget.setDragEnabled()為True,另外,控件應(yīng)該響應(yīng)拖曳事件,以便儲(chǔ)存所拖曳的數(shù)據(jù)

常用的拖曳事件如表

事件描述
DragEnterEvent當(dāng)執(zhí)行一個(gè)拖曳控件操作,并且鼠標(biāo)指針進(jìn)入該控件時(shí),這個(gè)事件將會(huì)被觸發(fā)。在這個(gè)事件中可以獲得被操作的窗口控件,還可以有條件地接受或拒絕該拖曳操作
DragMoveEvent在拖曳操作進(jìn)行時(shí)會(huì)觸發(fā)該事件
DragLeaveEvent當(dāng)執(zhí)行一個(gè)拖曳操作,并且鼠標(biāo)指針離開該控件時(shí),這個(gè)事件被觸發(fā)
DropEvent當(dāng)拖曳操作在其目標(biāo)控件上被釋放時(shí),這個(gè)事件將被觸發(fā)

Drag拖曳功能實(shí)例

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Combo(QComboBox):
  def __init__(self,title,parent):
    super(Combo, self).__init__(parent)
    #設(shè)置為可接受拖曳操作文本
    self.setAcceptDrops(True)

  #當(dāng)執(zhí)行一個(gè)拖曳控件操作,并且鼠標(biāo)指針進(jìn)入該控件時(shí),這個(gè)事件將會(huì)被觸發(fā)。
  # 在這個(gè)事件中可以獲得被操作的窗口控件,還可以有條件地接受或拒絕該拖曳操作
  def dragEnterEvent(self,e):
    #檢測(cè)拖曳進(jìn)來(lái)的數(shù)據(jù)是否包含文本,如有則接受,無(wú)則忽略
    if e.mimeData().hasText():
      e.accept()
    else:
      e.ignore()
  #當(dāng)拖曳操作在其目標(biāo)控件上被釋放時(shí),這個(gè)事件將被觸發(fā)
  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('請(qǐng)把左邊的文本拖曳到右邊的下拉菜單中'))

    #實(shí)例化單行文本框,設(shè)置為允許拖曳操作
    edit=QLineEdit()
    edit.setDragEnabled(True)

    #實(shí)例化Combo對(duì)象,添加控件到布局中
    com=Combo('Button',self)
    lo.addRow(edit,com)

    #設(shè)置主窗口布局及標(biāo)題
    self.setLayout(lo)
    self.setWindowTitle('簡(jiǎn)單的拖曳例子')

if __name__ == '__main__':
  app=QApplication(sys.argv)
  ex=Example()
  ex.show()
  sys.exit(app.exec_())

效果如圖

怎么在python中使用Drag與Drop控件

代碼分析:

在這個(gè)例子中,DragEnterEvent會(huì)驗(yàn)證事件的MIM的數(shù)據(jù)是否包含字符串文本,如果包含字符串文本,就接受事件提出的添加文本操作,并將文本作為新條目(Item)添加到ComboBox控件中,否則忽略這次操作

  def dragEnterEvent(self,e):
    #檢測(cè)拖曳進(jìn)來(lái)的數(shù)據(jù)是否包含文本,如有則接受,無(wú)則忽略
    if e.mimeData().hasText():
      e.accept()
    else:
      e.ignore()

上述內(nèi)容就是怎么在python中使用Drag與Drop控件,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前名稱:怎么在python中使用Drag與Drop控件-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)源:http://muchs.cn/article26/dhgijg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站收錄、網(wǎng)站設(shè)計(jì)關(guān)鍵詞優(yōu)化、手機(jī)網(wǎng)站建設(shè)、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作