pyqt5-拖拽


 

文件拖拽: 

實例一:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel,QPushButton,QLineEdit,QFileDialog

class DropLineEdit(QLineEdit):  #重寫QLineEdit類--增加拖拽功能
    def __init__(self, parent=None):
        super(DropLineEdit, self).__init__(parent)
        #self.setAcceptDrops(True)   #是否接受拖放
        self.setDragEnabled(True)  # 拖拽是否啟用
        #允許拖曳數據的控件必須設置QWidget.setDragEnabled()為True

    def dragEnterEvent(self, e):  #當拖動進入到控件區域時--事件
        #鼠標指針進入該控件時,這個事件將會被觸發。在這個事件中可以獲得被操作的窗口控件,還可以有條件地接受或拒絕該拖曳操作
        #通過e參數, 可取得QDragEnterEvent實例
        print('文件所有的路徑',e.mimeData().urls())  # 文件所有的路徑
        #[PyQt5.QtCore.QUrl('file:///D:/各種電影網地址.txt'), PyQt5.QtCore.QUrl('file:///D:/萊頓湖.jpg'), PyQt5.QtCore.QUrl('file:///D:/費南多.jpg')]
        #說明:拖動文件時可能同時拖動多個文件,返回值是列表--包含拖動的所有文件的路徑

        print('文件路徑',e.mimeData().text(),type(e.mimeData().text()))  # 文件路徑
        #返回值類型str,【多個文件時,文件之間包含\n】
        #file:///D:/費南多.jpg
        #file:///D:/各種電影網地址.txt

        #print('支持的所有格式',e.mimeData().formats())  # 支持的所有格式

        #print(e.mimeData().data('text/plain'))  # 根據mime類型取路徑 值為字節數組
        #b'file:///D:/\xe8\xb4\xb9\xe5\x8d\x97\xe5\xa4\x9a.jpg\nfile:///D:/\xe5\x90\x84\xe7\xa7\x8d\xe7\x94\xb5\xe5\xbd\xb1\xe7\xbd\x91\xe5\x9c\xb0\xe5\x9d\x80.txt\n'

        print(e.mimeData().hasText())  # 是否文本文件格式
        #True
        if e.mimeData().hasText():   #是否文本文件格式
            e.accept()   #是就接受--把文本在QLineEdit顯示出來--文件路徑顯示出來
            #[在鼠標釋放時接受]

        else:
            e.ignore()   #不是就忽略


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        self.resize(500,300)
        self.setWindowTitle('實驗室賬盤點核對')
        self.wenjian_button=QPushButton('要核對的文件',self)
        self.wenjian_button.move(10, 10)
        self.wenjian_edit = DropLineEdit(self)
        self.wenjian_edit.move(100,10)
        self.wenjian_edit.resize(350,20)
        

    def wenjianbutton(self):
        r = QFileDialog.getOpenFileName(self, '請選擇要打開的文件', './', 'All(*.*);;Excel(*.xlsx)',
                                        'Excel(*.xlsx)')
        self.wenjian_edit.setText(r[0])



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

效果圖:

 

 

 實例二:

 
         
import sys
from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QLineEdit,QFileDialog

class DropLineEdit(QLineEdit):
def __init__(self, parent=None):
super(DropLineEdit, self).__init__(parent)
#self.setAcceptDrops(True)
self.setDragEnabled(True)
def dragEnterEvent(self, e):
if e.mimeData().hasText():
e.accept() #[只有接受之后,移動事件和釋放事件才可以]
else:
e.ignore()

def dropEvent(self, e): #拖拽時鼠標釋放事件
if e.mimeData().hasText():
fath=e.mimeData().text()
fath = fath.split('\n')
print(fath[0]) #只取第一個文件
fath = fath[0].split('///') #去掉file:///
self.setText(fath[1]) #把路徑寫入QLineEdit控件
else:
e.ignore()

class Demo(QWidget):
def __init__(self):
super(Demo, self).__init__()
self.resize(500,300)
self.setWindowTitle('實驗室賬盤點核對')
self.wenjian_button=QPushButton('要核對的文件',self)
self.wenjian_button.move(10, 10)
self.wenjian_edit = DropLineEdit(self)
self.wenjian_edit.move(100,10)
self.wenjian_edit.resize(350,20)


def wenjianbutton(self):
r = QFileDialog.getOpenFileName(self, '請選擇要打開的文件', './', 'All(*.*);;Excel(*.xlsx)',
'Excel(*.xlsx)')
self.wenjian_edit.setText(r[0])



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

效果圖:

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM