python GUI庫圖形界面開發(fā)之PyQt5控件數(shù)據(jù)拖曳Drag與Drop詳細(xì)使用方法與實(shí)例
PyQt5數(shù)據(jù)拖曳Drag與Drop介紹
為用戶提供的拖曳功能很直觀,在很對桌面應(yīng)用程序中,復(fù)制或移動(dòng)對象都可以通過拖曳來完成
基于MIME類型的拖曳數(shù)據(jù)傳輸是基于QDrag類的,QMimeData對象將關(guān)聯(lián)的數(shù)據(jù)與其對應(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)記語言文本 .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
任意的二進(jìn)制數(shù)據(jù) application/octet-stream
MIME類型的數(shù)據(jù)可以簡單的理解為互聯(lián)網(wǎng)上的各種資源,比如文本,音頻和圖片等資源,互聯(lián)網(wǎng)上的每一種資源都屬于一種MIME類型的數(shù)據(jù)
MimeData類函數(shù)允許檢測和使用方便的MIME類型
判斷函數(shù) | 設(shè)置函數(shù) | 獲取函數(shù) | MIME類型 |
---|---|---|---|
hasText() | text() | setText() | text/plain |
hasHtml() | html() | setHtml() | text/html |
hasUrls() | urls() | setUrls() | text/url-list |
hasImage() | imageData() | setImageData | image/* |
hasColor() | colorData() | setColrDaata() | application/x-color |
許多QWidget對象都支持拖曳動(dòng)作,允許拖曳數(shù)據(jù)的控件必須設(shè)置QWidget.setDragEnabled()為True,另外,控件應(yīng)該響應(yīng)拖曳事件,以便儲存所拖曳的數(shù)據(jù)
常用的拖曳事件如表
事件 | 描述 |
---|---|
DragEnterEvent | 當(dāng)執(zhí)行一個(gè)拖曳控件操作,并且鼠標(biāo)指針進(jìn)入該控件時(shí),這個(gè)事件將會被觸發(fā)。在這個(gè)事件中可以獲得被操作的窗口控件,還可以有條件地接受或拒絕該拖曳操作 |
DragMoveEvent | 在拖曳操作進(jìn)行時(shí)會觸發(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è)事件將會被觸發(fā)。 # 在這個(gè)事件中可以獲得被操作的窗口控件,還可以有條件地接受或拒絕該拖曳操作 def dragEnterEvent(self,e): #檢測拖曳進(jìn)來的數(shù)據(jù)是否包含文本,如有則接受,無則忽略 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('請把左邊的文本拖曳到右邊的下拉菜單中')) #實(shí)例化單行文本框,設(shè)置為允許拖曳操作 edit=QLineEdit() edit.setDragEnabled(True) #實(shí)例化Combo對象,添加控件到布局中 com=Combo('Button',self) lo.addRow(edit,com) #設(shè)置主窗口布局及標(biāo)題 self.setLayout(lo) self.setWindowTitle('簡單的拖曳例子') if __name__ == '__main__': app=QApplication(sys.argv) ex=Example() ex.show() sys.exit(app.exec_())
效果如圖
代碼分析:
在這個(gè)例子中,DragEnterEvent會驗(yàn)證事件的MIM的數(shù)據(jù)是否包含字符串文本,如果包含字符串文本,就接受事件提出的添加文本操作,并將文本作為新條目(Item)添加到ComboBox控件中,否則忽略這次操作
def dragEnterEvent(self,e): #檢測拖曳進(jìn)來的數(shù)據(jù)是否包含文本,如有則接受,無則忽略 if e.mimeData().hasText(): e.accept() else: e.ignore()
本文主要介紹了PyQt5控件數(shù)據(jù)拖曳Drag與Drop詳細(xì)使用方法與實(shí)例,更多關(guān)于這方面的知識請查看下面的相關(guān)鏈接
- 在PYQT5中QscrollArea(滾動(dòng)條)的使用方法
- python GUI庫圖形界面開發(fā)之PyQt5 MDI(多文檔窗口)QMidArea詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5樹形結(jié)構(gòu)控件QTreeWidget詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5選項(xiàng)卡控件QTabWidget詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5表格控件QTableView詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5打印控件QPrinter詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5狀態(tài)欄控件QStatusBar詳細(xì)使用方法實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5計(jì)數(shù)器控件QSpinBox詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5切換按鈕控件QPushButton詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5多行文本框控件QTextEdit詳細(xì)使用方法實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5單選按鈕控件QRadioButton詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5復(fù)選框控件QCheckBox詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5滑塊條控件QSlider詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5工具欄控件QToolBar的詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5菜單欄控件QMenuBar的詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5日期時(shí)間控件QDateTimeEdit詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5下拉列表框控件QComboBox詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5訪問系統(tǒng)剪切板QClipboard類詳細(xì)使用方法與實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5滾動(dòng)條控件QScrollBar詳細(xì)使用方法與實(shí)例
相關(guān)文章
Python?pandas處理缺失值方法詳解(dropna、drop、fillna)
缺失數(shù)據(jù)會在很多數(shù)據(jù)分析應(yīng)用中出現(xiàn),pandas的目標(biāo)之一就是盡可能無痛地處理缺失值,下面這篇文章主要給大家介紹了關(guān)于Python?pandas處理缺失值方法的相關(guān)資料,處理方法分別是dropna、drop、fillna,需要的朋友可以參考下2022-08-08python 實(shí)時(shí)得到cpu和內(nèi)存的使用情況方法
今天小編就為大家分享一篇python 實(shí)時(shí)得到cpu和內(nèi)存的使用情況方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06python 設(shè)置文件編碼格式的實(shí)現(xiàn)方法
下面小編就為大家分享一篇python 設(shè)置文件編碼格式的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12python中如何實(shí)現(xiàn)將數(shù)據(jù)分成訓(xùn)練集與測試集的方法
這篇文章主要介紹了python中如何實(shí)現(xiàn)將數(shù)據(jù)分成訓(xùn)練集與測試集的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09