第二十四篇 -- 拖放图片
效果图:
功能:拖动一个图片到窗口并根据label大小进行显示。
用到了两个事件处理的函数
dragEnterEvent —— 拖入时触发
dropEvent —— 放下图片时触发
play.py
#!/usr/bin/env python # _*_ coding: UTF-8 _*_ """================================================= @Project -> File : Operate_system_ModeView_structure -> play_hasImage.py @IDE : PyCharm @Author : zihan @Date : 2020/5/6 14:15 @Desc :拖动图片到窗口并且显示图片 使用QImageReader解决了文件格式不对的读取问题 使用QImage解决了图片文件过大的问题。 =================================================""" import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap, QImage, QImageReader from ui_hasImage import Ui_Form class QmyWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) # 调用父类构造函数 self.ui = Ui_Form() # 创建UI对象 self.ui.setupUi(self) # 构造UI self.setAcceptDrops(True) self.ui.LabPic.setAcceptDrops(False) self.ui.LabPic.setScaledContents(True) # 图片适应Label大小 # # =======================================事件处理函数 def dragEnterEvent(self, event): if event.mimeData().hasUrls(): event.acceptProposedAction() # 接收拖放操作 def dropEvent(self, event): # # 方法一:针对小图片 # pixmap = QPixmap(event.mimeData().urls()[0].toLocalFile()) # self.ui.LabPic.setPixmap(pixmap) # # # 方法二:小图片和PNG格式的大图片 # img = QImage() # print(event.mimeData().urls()[0].toLocalFile()) # img.load(event.mimeData().urls()[0].toLocalFile()) # pixmap = QPixmap.fromImage(img.scaled(self.ui.LabPic.size(), Qt.KeepAspectRatio)) # self.ui.LabPic.setPixmap(pixmap) # 方法三:小图片和大图片 reader = QImageReader() reader.setFileName(event.mimeData().urls()[0].toLocalFile()) reader.setDecideFormatFromContent(True) if reader.canRead(): img = QImage(reader.read()) pixmap = QPixmap.fromImage(img.scaled(self.ui.LabPic.size(), Qt.KeepAspectRatio)) self.ui.LabPic.setPixmap(pixmap) if __name__ == '__main__': app = QApplication(sys.argv) # 创建app form = QmyWidget() form.show() sys.exit(app.exec_())
如此便可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2019-05-07 第四十八篇--数据库的增删改查
2019-05-07 第四十七篇--重命名包名的方法以及问题解决方法
2019-05-07 第三篇--如何修改exe文件版本号和文件信息
2019-05-07 内外网同时上命令