pyqt 显示图片的若干方法

您所在的位置:网站首页 展示栏图片 pyqt 显示图片的若干方法

pyqt 显示图片的若干方法

2024-01-17 01:59| 来源: 网络整理| 查看: 265

date: 2022-11-30 14:23 status: public title: ‘pyqt 显示图片的若干方法’

单张图片 使用lable 显示图片

特点是最简单,但功能也最少。

#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QLabel class ImageLabel(QWidget): def __init__(self, parent=None): super().__init__(parent) self.resize(600, 400) self.setWindowTitle("label image") pix = QPixmap(r'C:\fruits.jpg') label = QLabel(self) label.setPixmap(pix) label.setScaledContents(True) # 自适应QLabel大小 layout = QVBoxLayout() layout.addWidget(label) self.setLayout(layout) if __name__ == '__main__': app = QApplication(sys.argv) mainWidget = ImageLabel() mainWidget.show() sys.exit(app.exec_()) 使用pyqtgraph 控件显示图片

来源 【PyQtGraph】显示图像 特点 可以对图片进行缩放操作,继承了pyqtgraph 的一些特点功能。

""" 安装依赖库: 1. Pillow 2. PySide2 3. PyQtGraph from https://blog.csdn.net/zhy29563/article/details/119754910 """ import sys import numpy as np import pyqtgraph as pg from PIL import Image from PyQt5.QtWidgets import QApplication, QVBoxLayout, QPushButton, QWidget, QFileDialog from pyqtgraph import ImageView # 设置 PyQtGraph 显示配置 ######################################################################################################################## # 设置显示背景色为白色,默认为黑色 pg.setConfigOption('background', 'w') # 设置显示前景色为黑色,默认为灰色 pg.setConfigOption('foreground', 'k') # 设置图像显示以行为主,默认以列为主 pg.setConfigOption('imageAxisOrder', 'row-major') class PyQtGraphicDemo(QWidget): def __init__(self, parent=None): super(PyQtGraphicDemo, self).__init__(parent) self.resize(600, 400) # 图像显示控件 self.graphicsView = ImageView(self) # 隐藏直方图,菜单按钮,ROI self.graphicsView.ui.histogram.hide() self.graphicsView.ui.menuBtn.hide() self.graphicsView.ui.roiBtn.hide() image = Image.open(r'C:\fruits.jpg') if image is not None: # 如果之前未设置显示选项以行为主,这里需要对显示图像进行转置 self.graphicsView.setImage(np.array(image)) self.verticalLayout = QVBoxLayout(self) self.verticalLayout.addWidget(self.graphicsView) # 设置窗口布局 self.setLayout(self.verticalLayout) if __name__ == '__main__': app = QApplication(sys.argv) window = PyQtGraphicDemo() window.show() sys.exit(app.exec_()) 多张图片 使用scrollArea 显示多张图片

来源:PyQt5-使用scrollArea实现图片查看器功能

特点是当窗口大小小于scrollArea 区域大小时有滑动条显示,可以拖动滑动条滑动界面。

但是这份代码有个缺点,就是当窗口大小大于scrollArea 区域大小时,你会发现scrollArea 以外的区域是空白的,也就是scrollArea 是固定大小的,区域外不会显示内容。注释掉 self.setFixedSize(850, 600) 可以测试看到。 这份代码的显示原理大致如下:创建一个scrollArea控件,对多张图像依次执行下面循环的操作:1. 创建一个label 显示image;2. label 添加到 一个QVBoxLayout 中,3. QVBoxLayout 作为一个临时的QWidget layout,4. 移动这个临时的 QWidget 到指定坐标。emmm 就不是很优雅。

# from https://blog.csdn.net/HG0724/article/details/116702824 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.uic import loadUi class Picture(QMainWindow): def __init__(self, parent=None, url=None): super().__init__(parent) self.url = url self.ui() def ui(self): loadUi('./show_pic.ui', self) # self.setFixedSize(850, 600) total = len(self.url) 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): photo = QPixmap(self.url[i]) # print('photo:',photo) # photo.loadFromData(req.content) width = photo.width() height = photo.height() print('width:', width, ' ', 'height:', height) if width == 0 or height == 0: continue tmp_image = photo.toImage() # 将QPixmap对象转换为QImage对象 size = QSize(width, height) # photo.convertFromImage(tmp_image.scaled(size, Qt.IgnoreAspectRatio)) photo = photo.fromImage(tmp_image.scaled(size, Qt.IgnoreAspectRatio)) # 为每个图片设置QLabel容器 label = QLabel() label.setFixedSize(150, 200) label.setStyleSheet("border:1px solid gray") label.setPixmap(photo) label.setScaledContents(True) # 图像自适应窗口大小 vl = QVBoxLayout() vl.addWidget(label) tmp = QWidget(self.qw) tmp.setLayout(vl) tmp.move(160 * (i % 5), 230 * int(i / 5)) self.scrollArea.setWidget(self.qw) # 和ui文件中名字相同 if __name__ == '__main__': app = QApplication(sys.argv) # 这是我的文件夹中图片的路径 import glob url = glob.glob(r"C:\waDump\*.jpg") pic = Picture(url=url) pic.show() sys.exit(app.exec_()) 使用scrollArea + gridLayout 显示多张图片

可以缩放窗口,图像可以随着窗口变化,但只是图像间距拉伸,每行的图片数量没有变化

# -*- coding: utf-8 -*- import glob import time from PyQt5 import QtWidgets from PyQt5.QtCore import QSize, Qt from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QApplication, QLabel, QGridLayout class Picture(QtWidgets.QWidget): def __init__(self, parent=None): super(Picture, self).__init__(parent) print('Picture init') self.setWindowTitle('All Images') self.resize(800, 600) # ui components self.scrollArea = QtWidgets.QScrollArea() self.scrollArea.setWidgetResizable(True) self.scrollAreaWidgetContents = QtWidgets.QWidget() # self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.gridLayout = QGridLayout(self.scrollAreaWidgetContents) self.v_layout = QtWidgets.QVBoxLayout(self) self.v_layout.addWidget(self.scrollArea) self.setLayout(self.v_layout) # vars self.max_columns = 5 def load_images(self, paths): print('load images --start') total = len(paths) col = 0 row = 0 for i in range(total): self.max_columns = total if total 0: # 打开新窗口显示单张图片 # self.single_image = SingleImageView(image=img_path, background=Qt.white) # self.single_image.show() pass pass def load_images(self, paths): for i in range(len(paths)): img_item = ImageQListWidgetItem("dump image ***", paths[i]) self.addItem(img_item) self.setItemWidget(img_item, img_item.widget) # 刷新界面 QApplication.processEvents() # 自定义的item 继承自QListWidgetItem class ImageQListWidgetItem(QListWidgetItem): def __init__(self, name, img_path): super().__init__() self.img_path = img_path # 自定义item中的widget 用来显示自定义的内容 self.widget = QWidget() # 用来显示name self.nameLabel = QLabel() self.nameLabel.setText(name) # 用来显示avator(图像) self.avatorLabel = QLabel() # 设置图像源 和 图像大小 img_obg = QPixmap(img_path) width = img_obg.width() height = img_obg.height() scale_size = QSize(200, 150) if width


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3