技术点:
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)
暂无评论内容