PyQT5之图片滚动

news/2025/3/20 20:36:28/文章来源:https://www.cnblogs.com/jackchen28/p/18231330

图片滚动

import osfrom PyQt5 import QtWidgets
from PyQt5 import QtCore, QtGui
import sys
import cv2class ButtonPanel(QtWidgets.QWidget):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.image_files = []self.img_idx = -1select_btn = QtWidgets.QPushButton("图像选择")back_pix = QtWidgets.QStyle.SP_ArrowBackback_icon = self.style().standardIcon(back_pix)     # 向后图标back_btn = QtWidgets.QPushButton(back_icon, "")back_btn.setToolTip("上一张...")                     # 鼠标悬停显示上一张back_btn.setMinimumHeight(48)forward_pix = QtWidgets.QStyle.SP_ArrowForwardforward_icon = self.style().standardIcon(forward_pix)   # 向前图标forward_btn = QtWidgets.QPushButton(forward_icon, "")forward_btn.setToolTip("下一张...")                      # 鼠标悬停显示下一张forward_btn.setMinimumHeight(48)self.path_label = QtWidgets.QLabel()self.path_label.setText("当前未显示图像路径")self.path_label.setAlignment(QtCore.Qt.AlignCenter)  # label上居中显示self.path_label.setMaximumHeight(50)  # label最大高度设置self.path_label.setStyleSheet("background-color:pink;color:green")  # 背景颜色设置font = QtGui.QFont()font.setBold(True)font.setPointSizeF(10)self.path_label.setFont(font)self.image_label = QtWidgets.QLabel()# 方法二:使用cv2显示src = cv2.imread("./image/img1.png")  # BGRimage = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)  # 将BGR转为RGBh, w, c = image.shapeimg = QtGui.QImage(image.data, w, h, 3 * w, QtGui.QImage.Format_RGB888)pixmap = QtGui.QPixmap(img)pix = pixmap.scaled(QtCore.QSize(640, 640), QtCore.Qt.KeepAspectRatio)  # 自动保持比例放缩方式self.image_label.setPixmap(pix)  # 设置图像显示self.image_label.setAlignment(QtCore.Qt.AlignCenter)  # label上的内容居中显示self.image_label.setStyleSheet("background-color:blue;color:green")  # 背景颜色设置btn_panel = QtWidgets.QGroupBox("图像文件选择")hboxlayout = QtWidgets.QHBoxLayout()hboxlayout.addWidget(self.path_label)hboxlayout.addWidget(select_btn)hboxlayout.addStretch(1)btn_panel.setLayout(hboxlayout)bf_panel = QtWidgets.QWidget()hblayout = QtWidgets.QHBoxLayout()hblayout.addWidget(back_btn)hblayout.addWidget(forward_btn)bf_panel.setLayout(hblayout)vboxlayout = QtWidgets.QVBoxLayout()vboxlayout.addWidget(btn_panel)vboxlayout.addWidget(self.image_label)vboxlayout.addWidget(bf_panel)vboxlayout.addStretch(1)self.setLayout(vboxlayout)# 绑定点击# select_btn.clicked.connect(self.on_select_image)select_btn.clicked.connect(self.on_select_dir)back_btn.clicked.connect(self.on_back_image)forward_btn.clicked.connect(self.on_forward_image)def on_select_image(self):fileinfo = QtWidgets.QFileDialog.getOpenFileName(self, "打开图像文件", ".", "图像文件(*.jpg *.png)")fileName = fileinfo[0]if fileName != "":self.path_label.setText(fileName)pixmap = QtGui.QPixmap(fileName)pix = pixmap.scaled(QtCore.QSize(640, 640), QtCore.Qt.KeepAspectRatio)  # 自动保持比例放缩方式self.image_label.setPixmap(pix)   # 设置图像显示def on_select_dir(self):# 获取文件夹地址curr_dir = QtWidgets.QFileDialog.getExistingDirectory(self, "图像文件夹", ".")files = os.listdir(curr_dir)self.image_files.clear()for f in files:print(f)self.image_files.append(os.path.join(curr_dir, f))self.img_idx = 0pixmap = QtGui.QPixmap(self.image_files[self.img_idx])pix = pixmap.scaled(QtCore.QSize(640, 640), QtCore.Qt.KeepAspectRatio)  # 自动保持比例放缩方式self.image_label.setPixmap(pix)   # 设置图像显示def on_back_image(self):print("previous image...")if self.img_idx == -1:returnself.img_idx -= 1if self.img_idx < 0:self.img_idx = 0pixmap = QtGui.QPixmap(self.image_files[self.img_idx])pix = pixmap.scaled(QtCore.QSize(640, 640), QtCore.Qt.KeepAspectRatio)  # 自动保持比例放缩方式self.image_label.setPixmap(pix)   # 设置图像显示def on_forward_image(self):print("next image...")if self.img_idx == -1:returnself.img_idx += 1if len(self.image_files) > self.img_idx:pixmap = QtGui.QPixmap(self.image_files[self.img_idx])pix = pixmap.scaled(QtCore.QSize(640, 640), QtCore.Qt.KeepAspectRatio)  # 自动保持比例放缩方式self.image_label.setPixmap(pix)   # 设置图像显示else:self.img_idx = len(self.image_files) - 1if __name__ == '__main__':app = QtWidgets.QApplication(sys.argv)main_win = QtWidgets.QMainWindow()main_win.setWindowTitle("图像浏览显示")myPanel = ButtonPanel()main_win.setCentralWidget(myPanel)main_win.setMinimumSize(1080, 720)main_win.show()app.exec_()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/719924.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ovs学习自用

ovs框架 当前最新代码包主要包括以下模块和特性: ovs-vswitchd: 主要模块,实现switch的daemon,包括一个支持流交换的Linux内核模块; ovsdb-server: 轻量级数据库服务器,提供ovs-vswitchd获取配置信息,例如vlan、port等信息; ovs-brcompatd: 让ovs-vswitch替换linux …

Sms-Activate是一个很好用的短信接码平台

在海外有很多好用社交或者服务都需要注册才能使用,但是注册账号需要保证IP是特定的国家和相应国家的验证码,通常在国内就没法接收到验证码了,为了接受验证码我们需要找一个接码平台,而sms-activate就是一个非常好用的短信验证码接码平台,费用就在1.5人民币左右,通过它我们…

配置加密

目前我们配置文件中的很多参数都是明文,如果开发人员发生流动,很容易导致敏感信息的泄露。所以MybatisPlus支持配置文件的加密和解密功能。 我们以数据库的用户名和密码为例。 生成秘钥 首先,我们利用AES工具生成一个随机秘钥,然后对用户名、密码加密: package com.itheim…

Sublime 修改乱码文件

在线乱码恢复 (ff98sha.me) 用这个查看乱码的发生过程,然后将文件保存为当前的编码,最后在重新编译为自己想要的编码文件

对相同的key中的value进行合并

// 假设 ccmdbCarWeizis 是一个包含 CarWeizi 对象的列表 ccmdbCarWeizis.forEach(carWeizi -> {// 提取 CarWeizi 对象的 carInformation 属性的前三个字符作为省份简称String label = carWeizi.getCarInformation().substring(0, 3);// 检查 groupedMap 是否已经包含这个省…

ssl证书安全认证的原理是什么?

SSL证书安全认证的原理是什么? SSL证书是一种数字安全证书,由受信任的CA机构验证身份后颁发,可以对数据传输进行加密以及对服务器进行身份验证。在配置SSL证书后,网站地址栏会显示“https://”开头,同时显示安全锁标志或绿色地址栏,这表示该网站已经通过了权威的第三方CA…

JSON类型处理器

数据库的user表中有一个info字段,是JSON类型:格式像这样: {"age": 20, "intro": "佛系青年", "gender": "male"} 而目前User实体类中却是String类型:这样一来,我们要读取info中的属性时就非常不方便。如果要方便获取,…

路过的朋友,欢迎来看看通俗易懂版本的Nacos

​ 一、什么是Nacos? 一个更易于构建云原生应用的动态服务发现、服务配置和服务管理平台。 Nacos的关键特性: 二、注册中心演变及其设计思想 1、RestTemplate调用远程服务 如果此时,服务端接口接口名或参数或请求方式更改了,那么就得同步修改此restTemplate方法,感觉很麻…

深入解读Prometheus Adapter:云原生监控的核心组件

本文详述了Prometheus Adapter的部署与配置,通过三个实践案例展示其在Kubernetes环境中的应用,帮助用户实现基于自定义指标的自动扩展和跨集群统一监控。关注作者,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智…

智能农业:农业现代化的新引擎

在科技日新月异的今天,智能农业正迅速崛起为引领农业现代化的重要力量。借助物联网、大数据和人工智能等尖端技术,智能农业为农业生产带来了前所未有的智能监测、精准控制和高效管理,极大地提升了农业生产的效率和质量。智能农业的技术支撑是其成功的关键。其中,智能感知、…

STM32系列 PWM输出

#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "usart.h" #include "timer.h" //ALIENTEK战舰STM32开发板实验9 //PWM输出实验 //技术支持:www.openedv.com //广州市星翼电…

为什么想做副业???还不是因为穷

为什么那一刻突然想做副业???: 1、没有门路,没有渠道,害怕被骗,担心赚不到钱。 2、免费的怕被骗,要钱的却直接支付了,真豪爽(结果都没有赚到本钱) 我听到最搞笑的一句是:别人在哪个平台能找到我的店铺呢。。。不行动钱自己送上门???那为什么有些人想做却做不来呢…