Python中PyQt5可視化界面通過拖拽來上傳文件的實(shí)現(xiàn)
注:這個窗口提供了一個快速上傳文件的小tips,如果需要對上傳的文件進(jìn)行進(jìn)一步處理的可以在“processFiles”函數(shù)或者編寫其它函數(shù)進(jìn)行擴(kuò)充就可以。
1、需要安裝模塊
pip install PyQt5
2、運(yùn)行效果
1、通過拖拽的方式上傳需要的文件到窗口,會直接獲取到它的路徑并顯示出來
2、提交文件后,可以獲取窗口內(nèi)的所有文件路徑,并且以列表的形式存儲
3、python代碼
在代碼里都有詳細(xì)的注釋;這里就不做過多的說明
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget,QDesktopWidget ''' #1、使用以下代碼中的文件拖拽功能,只需將文件或文件夾拖拽到文本編輯框中即可。如果文件是本地文件,它們將以文件路徑的形式顯示在文本編輯框中。 #2、如果你想要進(jìn)一步處理這些文件路徑,比如復(fù)制、移動、讀取或執(zhí)行其他操作,你可以在 processFiles 方法中添加你的自定義代碼,該方法在用戶點(diǎn)擊提交按鈕后被調(diào)用。在該方法中,你可以訪問文本編輯框的內(nèi)容,將其拆分成文件路徑,并執(zhí)行相應(yīng)的操作。 ''' #使用子類來繼承父類的方法,這里的'DragDropTextEdit‘,繼承自 'QTextEdit‘ ,并且添加了文件拖拽的支持。 #這使得你可以將它用作拖拽文件的目標(biāo),以便在應(yīng)用程序中方便地處理文件路徑。 class DragDropTextEdit(QTextEdit): def __init__(self, parent=None): super(DragDropTextEdit, self).__init__(parent) self.setAcceptDrops(True) #定義的 DragDropTextEdit 類的構(gòu)造函數(shù)中調(diào)用的方法,它的作用是啟用該文本編輯框接受拖拽操作。 #當(dāng)用戶拖拽文件或其他可拖拽的內(nèi)容進(jìn)入文本編輯框時,這個方法會被觸發(fā) def dragEnterEvent(self, event): if event.mimeData().hasUrls(): #它檢查拖拽事件中的 MIME 數(shù)據(jù)是否包含文件路徑 event.accept() #如果包含文件路徑,它調(diào)用 event.accept() 來接受拖拽事件,允許文件拖拽進(jìn)入文本編輯框。 else: #否則,如果不包含文件路徑,它調(diào)用 event.ignore() 來忽略拖拽事件,表示不允許拖拽操作。 event.ignore() def dropEvent(self, event): #當(dāng)用戶釋放鼠標(biāo)按鈕時,這個方法會被觸發(fā),用于處理拖拽事件。在這個方法中,你可以獲取拖拽事件中的文件路徑。 for url in event.mimeData().urls(): #使用 event.mimeData().urls() 來獲取所有拖拽事件中的 URL 列表,每個 URL 表示一個文件或文件夾。 if url.isLocalFile() and url.toLocalFile(): #使用 url.toLocalFile() 來獲取本地文件路徑,如果是本地文件的話。 self.append(url.toLocalFile()) #接下來,你可以將這些文件路徑添加到文本編輯框中,或者進(jìn)行任何你希望執(zhí)行的處理。 class MainApp(QMainWindow): #創(chuàng)建實(shí)例化類 def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('文件拖拽窗口') #設(shè)置主窗口的標(biāo)題為 "文件拖拽窗口"。 # 獲取屏幕的寬度和高度 screen = QDesktopWidget().screenGeometry() screenWidth = screen.width() screenHeight = screen.height() # 計(jì)算窗口居中的坐標(biāo) x = (screenWidth - self.width()) // 2 y = (screenHeight - self.height()) // 2 #設(shè)置窗口大小已經(jīng)出現(xiàn)在屏幕的什么位置 self.setGeometry(x, y, 600, 400) #設(shè)置主窗口的初始位置和大小。 (x, y)是設(shè)置窗口出現(xiàn)的位置。窗口的寬度為 600 像素,高度為 400 像素。 #初始化窗口排版模式 central = QWidget(self) #創(chuàng)建一個名為 central 的 QWidget(窗口中央部件),用于將其他小部件添加到主窗口的中央?yún)^(qū)域。 self.setCentralWidget(central) #將 central 部件設(shè)置為主窗口的中央部分。這意味著所有其他小部件將放置在 central 部件中,以確保它們在窗口中間顯示。 display = QVBoxLayout(central) #創(chuàng)建一個垂直布局管理器 display,它將用于管理 central 部件中的小部件的位置和大小。垂直布局意味著小部件將按垂直方向排列。 #窗口 self.textEdit = DragDropTextEdit() #####這里來實(shí)例化上面子類繼承的內(nèi)容DragDropTextEdit 的實(shí)例,并將其賦值給 self.textEdit 屬性。這個文本編輯框支持文件拖拽功能。 display.addWidget(self.textEdit) #將 self.textEdit 添加到垂直布局管理器 display 中 #按鈕 self.submit_Button = QPushButton('提交文件', self) #創(chuàng)建提交按鈕的名稱 self.submit_Button.clicked.connect(self.processFiles) #給提交按鈕綁定事件函數(shù)processFiles display.addWidget(self.submit_Button) #展示出提交按鈕 def processFiles(self): file_paths = self.textEdit.toPlainText().split('\n') # 這里添加處理文件的代碼 print("文件路徑如下:", file_paths) def main(): app = QApplication(sys.argv) ex = MainApp() ex.show() sys.exit(app.exec_()) if __name__ == '__main__': main()
到此這篇關(guān)于Python中PyQt5可視化界面通過拖拽來上傳文件的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)PyQt5拖拽上傳文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python基礎(chǔ)教程之實(shí)現(xiàn)石頭剪刀布游戲示例
使用PYTHON設(shè)計(jì)一個"石頭,剪子,布"游戲,有時又叫"Rochambeau",下面是實(shí)現(xiàn)方法,需要的朋友可以參考下2014-02-02Python2.5/2.6實(shí)用教程 入門基礎(chǔ)篇
本文方便有經(jīng)驗(yàn)的程序員進(jìn)入Python世界.本文適用于python2.5/2.6版本.2009-11-11python雙向鏈表原理與實(shí)現(xiàn)方法詳解
這篇文章主要介紹了python雙向鏈表原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python雙向鏈表的定義、以及節(jié)點(diǎn)的判斷、遍歷、添加、刪除等相關(guān)操作技巧,需要的朋友可以參考下2019-12-12Python增量循環(huán)刪除MySQL表數(shù)據(jù)的方法
這篇文章主要介紹了Python增量循環(huán)刪除MySQL表數(shù)據(jù)的相關(guān)資料,本文介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下2016-09-09Python實(shí)現(xiàn)優(yōu)先級隊(duì)列結(jié)構(gòu)的方法詳解
優(yōu)先級隊(duì)列(priority queue)是0個或多個元素的集合,每個元素都有一個優(yōu)先權(quán),接下來就來看一下簡潔的Python實(shí)現(xiàn)優(yōu)先級隊(duì)列結(jié)構(gòu)的方法詳解:2016-06-06