PyQt5实现多张图片显示并滚动


Posted in Python onJune 11, 2021

最近要做个网页图片批量下载工具,然后需要一个页面显示网页上的所有图片供用户勾选,再根据勾选的内容来下载指定图片,其中就涉及到要到同时显示多张图片。

单页面显示多张图片

习惯性的用GridLayout但是发现怎么长时间解决都无法实现滚动,这样就会强制压缩图片大小,导致图片较多时显示的图片太小,不是我想要的,后面网上借鉴了一下用了ScrollArea实现了

代码如下:

import sys
import requests
from PyQt5.QtWidgets import (QWidget,  QLabel,QVBoxLayout,QCheckBox,QGridLayout, QScrollArea,QApplication)
from PyQt5.QtGui import  QPixmap
from PyQt5.QtCore import Qt,QSize

class Picture(QWidget):
    def __init__(self, parent=None, url=None):
        super().__init__(parent)
        self.url = url
        self.ui()

    def ui(self):
        self.setFixedSize(850,600)
        layout = QGridLayout()
        total = len(self.url)
        self.setLayout(layout)
        self.sc = QScrollArea(self)
        self.qw = QWidget()
        if total % 5 == 0:
            rows = int(total/5)
        else:
            rows = int(total/5) + 1
        self.qw.setMinimumSize(850,230*rows)
        for i in  range(total):
            pre_url = self.url[i].split("?")[0]
            sup = pre_url.split(".")[-1]
            req = requests.get(self.url[i])
            photo = QPixmap()
            photo.loadFromData(req.content)
            width = photo.width()
            height = photo.height()
            if width==0 or height==0:
                continue
            tmp_image = photo.toImage()
            size = QSize(width,height)
            photo.convertFromImage(tmp_image.scaled(size, Qt.IgnoreAspectRatio))
            tmp = QWidget(self.qw)
            vl = QVBoxLayout()
            label= QLabel()
            label.setFixedSize(150,200)
            label.setStyleSheet("border:1px solid gray")
            label.setPixmap(photo)
            label.setScaledContents(True)
            ck = QCheckBox(str(i)+"."+sup+"("+str(width)+"x"+str(height)+")", self)
            vl.addWidget(label)
            vl.addWidget(ck)
            tmp.setLayout(vl)
            tmp.move(160 * (i % 5), 230 * int(i / 5))
        self.sc.setWidget(self.qw)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    url=['https://pic2.zhimg.com/aadd7b895_xs.jpg?source=1940ef5c', 'https://pic2.zhimg.com/50/v2-60f7b5c071d378a34a3a6c489c3fdacc_hd.jpg?source=1940ef5c', 'https://pic2.zhimg.com/80/v2-60f7b5c071d378a34a3a6c489c3fdacc_720w.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-aa7d74fe48183d16a571278a012ff759_hd.jpg?source=1940ef5c', 'https://pic4.zhimg.com/50/v2-011ac12cbfe61ebc411ba437fac88780_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-dea9876e70b0a0b08b635796eb2c86da_hd.jpg?source=1940ef5c', 'https://pic2.zhimg.com/50/v2-8574116f58ac5e560da7e3656f80dcdf_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/80/v2-10e18ff65a640175ad058b4b5dfd2867_1440w.png', 'https://picb.zhimg.com/80/v2-a448b133c0201b59631ccfa93cb650f3_1440w.png', 'https://pic2.zhimg.com/v2-0cd41264be96353da10f5aca4088aa37_xs.jpg?source=1940ef5c', 'https://pic2.zhimg.com/50/v2-74c0b99f286ef52fefe4fd0cbe78c90b_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-27b377ed5db6b090a9834b00ffe54b8e_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-c7c874b8540a5dbdd93418429c39f188_hd.jpg?source=1940ef5c', 'https://pic4.zhimg.com/50/v2-fef58d7f36acb12ff4199fa507fc166e_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-fcd8d49f62634cb631ac08d5d1cc11ea_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-74fe1b6d5362b73fcfe5b887afcad6eb_hd.jpg?source=1940ef5c', 'https://pic2.zhimg.com/50/v2-6b6213d9a94f57722642b6bed847c6a2_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-bad7183c3135ea26d2e8e52653ee1f1c_hd.jpg?source=1940ef5c', 'https://pic2.zhimg.com/50/v2-476f50c384e1a4c90e994e6d63f63e8a_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-d720e9f8984d83da0a7344fa842cafa1_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-e82f6e26e7b49d7d7a5a0a337e2cd613_hd.jpg?source=1940ef5c', 'https://pic4.zhimg.com/50/v2-25496d917bf08c0ebc5106bb91f376a5_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-36e309f84b1395933488e6fa0f6bd341_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/80/v2-10e18ff65a640175ad058b4b5dfd2867_1440w.png', 'https://picb.zhimg.com/80/v2-a448b133c0201b59631ccfa93cb650f3_1440w.png', 'https://pic3.zhimg.com/aadd7b895_xs.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-c673663f10a662afc4a09dfe0d95c62c_hd.jpg?source=1940ef5c', 'https://pic4.zhimg.com/50/v2-891dd82d13e152e6204a827362adb0ef_hd.jpg?source=1940ef5c', 'https://pic3.zhimg.com/50/v2-dba8ca86ac6aa7c8517d22ee983c6e05_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/50/v2-f16d5a24150db2816817fa698ac4ad82_hd.jpg?source=1940ef5c', 'https://pic1.zhimg.com/80/v2-10e18ff65a640175ad058b4b5dfd2867_1440w.png', 'https://picb.zhimg.com/80/v2-a448b133c0201b59631ccfa93cb650f3_1440w.png', 'https://static.zhihu.com/heifetz/assets/sidebar-download-qrcode.7caef4dd.png', 'https://pic1.zhimg.com/70/v2-8228fff23c22a72b57d1627b7213942c.jpg', 'https://pic2.zhimg.com/aadd7b895_im.jpg?source=1940ef5c', 'https://pic3.zhimg.com/90/v2-426097a9370aad0ab673d53cca060c93_250x0.jpg', 'https://pic2.zhimg.com/90/v2-18b57487b9aca2b8e12246f67be0d138_250x0.jpg', 'https://pic2.zhimg.com/90/v2-50f7c79c972342024947936b0420b8e4_250x0.jpg', 'https://pic4.zhimg.com/v2-1945b21d09872d21de3db9c9614918b3_540x450.jpeg', 'https://pic3.zhimg.com/80/v2-d0289dc0a46fc5b15b3363ffa78cf6c7.png']


    pic = Picture(url=url)
    pic.show()
    sys.exit(app.exec_())

效果如下:

PyQt5实现多张图片显示并滚动

其中要计算好QWdiget的高度才能滚动,不然会发现可滚动的不足导致部分看不到或者滚动太多导致部分空白,都不好看。

到此这篇关于PyQt5实现多张图片显示并滚动的文章就介绍到这了,更多相关PyQt5 图片显示滚动内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
Python实现的简单dns查询功能示例
May 24 Python
python3操作微信itchat实现发送图片
Feb 24 Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 Python
python 利用文件锁单例执行脚本的方法
Feb 19 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
python-numpy-指数分布实例详解
Dec 07 Python
Python sqlite3查询操作过程解析
Feb 20 Python
PyTorch在Windows环境搭建的方法步骤
May 12 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 Python
基于Python实现的购物商城管理系统
Apr 27 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 Python
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
You might like
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
2013/05/08 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
php生出随机字符串
2017/07/06 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
js中Generator函数的深入讲解
2019/04/07 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
Python连接数据库学习之DB-API详解
2017/02/07 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
深入理解Django中内置的用户认证
2017/10/06 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
暑假实习求职信范文
2013/09/22 职场文书
欢迎家长标语
2014/10/08 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
学生逃课检讨书
2015/02/17 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
python实现双链表
2022/05/25 Python
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript