• 第二十四篇 -- 拖放图片


    效果图:

    功能:拖动一个图片到窗口并根据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_())

    如此便可。

  • 相关阅读:
    Core Data 入门
    iOS布局之Auto Layout
    iOS 布局之 Springs and Struts
    Soul 学习笔记---使用 nacos 实现数据同步上篇(七)
    Soul 学习笔记---使用 zookeeper 实现数据同步(六)
    Soul 学习笔记---数据同步 websocket 连接建立过程分析(五)
    Soul 学习笔记---soul 数据同步的浅显分析(四)
    Soul学习笔记---运行 soul-examples-dubbo(三)
    Soul学习笔记---运行 soul-examples-http(二)
    windows下安装zookeeper 及 遇到的问题---打开zkServer.cmd闪退,此时不应有 Javajdk1.8.0_144
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/12840988.html
Copyright © 2020-2023  润新知