PyQt-文件拖拽上传控件 DragFileWidget

qt版本:pyside6

python测试版本:3.9.19

效果:

代码:

from PySide6.QtGui import QDragEnterEvent
from PySide6.QtWidgets import (QWidget, QApplication,
                               QHBoxLayout, QLabel,
                               QSizePolicy, QLayout)


class DragFileWidget(QWidget):
    def __init__(self, parent=None, onFileDragIn=None):
        super().__init__(parent)
        if onFileDragIn is not None:
            self.onFileDrag = onFileDragIn

        self.setAcceptDrops(True)
        self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)

    def setWidget(self, widget: QWidget):
        base_layout = QHBoxLayout()
        base_layout.setSizeConstraint(QLayout.SizeConstraint.SetMaximumSize)
        base_layout.setContentsMargins(0, 0, 0, 0)
        base_layout.addWidget(widget)
        self.setLayout(base_layout)

    def dragEnterEvent(self, event: QDragEnterEvent) -> None:
        super(DragFileWidget, self).dragEnterEvent(event)
        files = event.mimeData().urls()
        if files:
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event: QDragEnterEvent):
        super(DragFileWidget, self).dropEvent(event)
        files = event.mimeData().urls()
        for file in files:
            file_path = file.toLocalFile()
            if file_path:
                self.onFileDragIn(file_path)

    def onFileDragIn(self, path):
        print(path)


if __name__ == '__main__':
    app = QApplication([])
    window = DragFileWidget()
    label = QLabel()
    label.setText("这里是文件上传区域")
    window.setWidget(label)
    label.setMinimumSize(50, 200)
    label.setStyleSheet("background-color:white")
    label.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
    window.show()
    app.exec()

使用:功能性的部件

  step 1:创建实例

widget = DragFileWidget(onFileDragIn=func)

  step 2:创建回调函数

def func(path):
    print(path)

step 3:填充内部的部件

label = QLabel()
label.setText("文件上传")
widget.setWidget(label)

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值