重写QLabel拖拽图片并显示

技术点:

1、继承
2、自定义信号函数pyqtSignal在使用时默认传递一个参数
3、槽函数,对应 pyqtSignal 信号

from PyQt5.QtCore import pyqtSignal

from PyQt5.QtWidgets import QLabel

# 重写Label控件

class DropLabel(QLabel): # 1、继承QLabel

    # 2、设置自定义信号函数pyqtSignal在使用时默认传递两个参数

    dropDown = pyqtSignal(object, str)

    def __init__(self, *args, **kwargs):

            QLabel.__init__(self, *args, **kwargs)

            self.setAcceptDrops(True)

     def dragEnterEvent(self, event):

            if event.mimeData().hasText():

            event.acceptProposedAction()

     def dropEvent(self, event):

            # 必定要使用super,由于程序先看子类方法再去看父类方法,子类方法覆盖了

            # 父类方法,会到导致dropEvent()的其他方法无法使用

            # event:事件对象

            super(DropLabel, self).dropEvent(event)

            image = event.mimeData().text()

            image_path = re.sub( ^file:/// , , image)

            # 图片是放在DropLabel对象内,并不是Qlabel对象

            # 3、槽函数,对应

pyqtSignal 信号,这里返回

DropLabel 对象和图片的路径

            self.dropDown.emit(self, image_path)

            event.acceptProposedAction()

class View(MainWindow):

        def _setup(self):

            # 创建重写的QLabel

            self.

_createLabel ()

            self.banner1.dropDown.connect(self.ondropDown)

       def _createLabel(self):

            self.banner1 = DropLabel(self. Widget32

)

            self.banner1.setObjectName(“banner1”)

            self.verticalLayout_47.addWidget(self.banner1)

        def ondropDown(self, _label, _path):

            if _path.endswith( .png ):

                pixmap = QPixmap(_path)

                _label.setScaledContents(True)# 自适应大小

                _label.setPixmap(pixmap)

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容