pyqt5使用Designer实现按钮上传图片

news2024/11/26 22:33:38

pyqt5使用Designer实现按钮上传图片

1、ui界面

在这里插入图片描述

2、ui转py代码

其中uploadimg.py代码如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'uploadimg.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.img_show = QtWidgets.QLabel(self.centralwidget)
        self.img_show.setGeometry(QtCore.QRect(41, 50, 711, 351))
        self.img_show.setObjectName("img_show")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(30, 10, 72, 15))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(50, 430, 41, 31))
        self.label_3.setObjectName("label_3")
        self.img_path = QtWidgets.QLineEdit(self.centralwidget)
        self.img_path.setGeometry(QtCore.QRect(100, 430, 371, 31))
        self.img_path.setObjectName("img_path")
        self.btn_upload = QtWidgets.QPushButton(self.centralwidget)
        self.btn_upload.setGeometry(QtCore.QRect(480, 430, 93, 28))
        self.btn_upload.setObjectName("btn_upload")
        self.img_list = QtWidgets.QComboBox(self.centralwidget)
        self.img_list.setGeometry(QtCore.QRect(100, 480, 371, 31))
        self.img_list.setObjectName("img_list")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(30, 480, 61, 31))
        self.label_4.setObjectName("label_4")
        self.btn_sure = QtWidgets.QPushButton(self.centralwidget)
        self.btn_sure.setGeometry(QtCore.QRect(480, 480, 93, 28))
        self.btn_sure.setObjectName("btn_sure")
        self.btn_next = QtWidgets.QPushButton(self.centralwidget)
        self.btn_next.setGeometry(QtCore.QRect(590, 480, 93, 28))
        self.btn_next.setObjectName("btn_next")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 27))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.img_show.setText(_translate("MainWindow", "图片"))
        self.label_2.setText(_translate("MainWindow", "图片"))
        self.label_3.setText(_translate("MainWindow", "路径"))
        self.btn_upload.setText(_translate("MainWindow", "加载"))
        self.label_4.setText(_translate("MainWindow", "图片列表"))
        self.btn_sure.setText(_translate("MainWindow", "确定"))
        self.btn_next.setText(_translate("MainWindow", "下一张"))

3、upload_main.py主函数代码

upload_main.py代码如下:

# -*- coding: utf-8 -*-

"""
@contact: 微信 1257309054
@file: upload_main.py
@time: 2023/12/10 11:48
@author: LDC
"""
import os
import sys

from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QMainWindow, QApplication

from upload_img.uploadimg import Ui_MainWindow


class Window(QMainWindow, Ui_MainWindow):
    def __init__(self, app):
        super(QMainWindow, self).__init__()
        self.app = app
        self.img_len = 0  # 图片列表
        self.setup_ui()  # 渲染画布
        self.connect_signals()  # 绑定触发事件

    def setup_ui(self):
        self.setupUi(self)

    def connect_signals(self):
        # 绑定触发事件
        self.btn_upload.clicked.connect(self.btn_upload_clicked)
        self.btn_sure.clicked.connect(self.btn_sure_clicked)
        self.btn_next.clicked.connect(self.btn_next_clicked)

    def btn_upload_clicked(self):
        # 点击加载按钮
        self.file_path = self.img_path.text()
        img_list = os.listdir(self.file_path)
        self.img_len = len(img_list)
        self.img_list.addItems([img_list[i] for i in range(self.img_len)])

    def btn_sure_clicked(self):
        # 点击确定按钮
        img = self.img_list.currentText()
        pix = QPixmap(self.file_path + "\\" + img)
        self.img_show.setPixmap(pix)
        self.img_show.setScaledContents(True)

    def btn_next_clicked(self):
        # 点击下一张
        if not self.img_len:
            return
        current_next = self.img_list.currentIndex() + 1

        if current_next >= self.img_len:
            current_next = 0
        self.img_list.setCurrentIndex(current_next)
        self.btn_sure_clicked()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mywindow = Window(app)
    mywindow.show()
    sys.exit(app.exec_())

4、效果图

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【小沐学Python】Python实现TTS文本转语音(speech、pyttsx3、百度AI)

文章目录 1、简介2、Windows语音2.1 简介2.2 安装2.3 代码 3、pyttsx33.1 简介3.2 安装3.3 代码 4、ggts4.1 简介4.2 安装4.3 代码 5、SAPI6、SpeechLib7、百度AI8、百度飞桨结语 1、简介 TTS(Text To Speech) 译为从文本到语音,TTS是人工智能AI的一个模组&#xf…

【unity实战】一个通用的FPS枪支不同武器射击控制脚本

文章目录 前言模型素材文章用到的粒子火光特效射击效果换弹瞄准开枪抖动效果设置显示文本最终代码不同武器射击效果1. 手枪2. 机枪3. 狙击枪4. 霰弹枪5. 加特林 其他感谢完结 前言 实现FPS枪支不同武器效果,比如手枪,喷子,狙击枪&#xff0c…

Dubbo入门直接上手,结合微服务详解

Dubbo 高性能、轻量级的 Java RPC 框架 RPC: Remote Procedure Call 远程过程调用,简单来说就是它允许一个计算机程序通过网络请求调用另一个计算机上的程序,就像本地调用一样。有非常多的协议和技术来都实现了RPC的过程,比如&a…

MySQL数据库,创建和管理表

创建数据库: 方式一:创建数据库 CREATE DATABASE 数据库名;(使用的是默认的字符集) 方式二:创建数据库并指定字符集 CREATE DATABASE 数据库名 CHARACTER SET 字符集; 方式三:判断数…

【原创】【一类问题的通法】【真题+李6卷6+李4卷4(+李6卷5)分析】合同矩阵A B有PTAP=B,求可逆阵P的策略

【铺垫】二次型做的变换与相应二次型矩阵的对应:二次型f(x1,x2,x3)xTAx,g(y1,y2,y3)yTBy ①若f在可逆变换xPy下化为g,即P为可逆阵,有P…

【大数据】Hudi 核心知识点详解(二)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 &#x…

设计模式篇---代理模式

文章目录 概念结构实例静态代理动态代理 总结 概念 代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。 比如我们想从其他国家买东西,但我们无法直接联系外国的商家,可以找代理商,让他们…

ipa文件怎么去除包体内的插件在线签名工具步骤

当开发者完成iOS应用的开发并构建完成后,应用程序会被打包为一个.ipa文件,这是一个iOS App Store的安装包格式。在某些情况下,开发者可能需要去除.ipa文件中包含的插件(通常指的是app extension、frameworks或watch apps等&#x…

内测分发是什么?十年的前端开发者带你了解

内测分发是软件开发过程中的一个阶段,特别指软件还未完全完成或准备对外广泛发布前,向一定范围的用户群体提供该软件版本的测试机会,以便收集反馈和修复潜在的问题。在讲解内测分发之前,我们需要明确几个相关概念: 软件…

12.视图

目录 1.视图的含义与作用 2.视图的创建与查看 1.创建视图的语法形式 2、查看视图: 1.使用DESCRIBE语句查看视图基本信息 2.使用SHOW TABLE STATUS语查看视图基本信息查看视图的信息 3.使用SHOW CREATE VIEW语查看视图详细信息 4.在views表中查看视图详细信息…

23.12.10日总结

周总结 这周三的晚自习,学姐讲了一下git的合作开发,还有懒加载,防抖,节流 答辩的时候问了几个问题: 为什么在js中0.10.2!0.3? 在js中进行属性运算时,会出现0.10.20.300000000000000004js遵循IEEE754标…

DIP——边缘提取与分割

1.使用canny算法进行边缘提取 本实验比较简单,基本思路是对原图像进行一个高斯模糊处理,用于去噪,之后转换为灰度图,直接调用cv库中的canny记性边缘提取。若想直接得到彩色边缘,则通过按位与操作,将原始彩色…

docker-centos中基于keepalived+niginx模拟主从热备完整过程

文章目录 一、环境准备二、主机1、环境搭建1.1 镜像拉取1.2 创建网桥1.3 启动容器1.4 配置镜像源1.5 下载工具包1.6 下载keepalived1.7 下载nginx 2、配置2.1 配置keepalived2.2 配置nginx2.2.1 查看nginx.conf2.2.2 修改index.html 3、启动3.1 启动nginx3.2 启动keepalived 4、…

MySQL - 聚簇索引和非聚簇索引,回表查询,索引覆盖,索引下推,最左匹配原则

聚簇索引和非聚簇索引 聚簇索引和非聚簇索引是 InnoDB 里面的叫法 一张表它一定有聚簇索引,一张表只有一个聚簇索引在物理上也是连续存储的 它产生的过程如下: 表中有无有主键索引,如果有,则使用主键索引作为聚簇索引;…

Kafka 最佳实践:构建可靠、高性能的分布式消息系统

Apache Kafka 是一个强大的分布式消息系统,被广泛应用于实时数据流处理和事件驱动架构。为了充分发挥 Kafka 的优势,需要遵循一些最佳实践,确保系统在高负载下稳定运行,数据可靠传递。本文将深入探讨 Kafka 的一些最佳实践&#x…

TailwindCSS 配置可视化检查器

问题 TailwindCSS 框架为我们提供了大量默认的类和属性,而且开发者也能够自定义类和配置。 对于初学者来说,这些配置其实是比较复杂的,这也是tailwindcss最大的入手成本,开发者的记忆负担和心智负担也都比较大。 有没有办法能够…

【BUG】微信小程序image不会随着url动态变化

问题描述: 第一次打开界面,显示的是默认头像而不是用户头像,似乎image里面的src只要第一次有值就不会再更新了 解决 不要给src里面的变量设置初始值,而是直接赋空值

ChatGPT 应用开发(一)ChatGPT OpenAI API 免代理调用方式(通过 Cloudflare 的 AI Gateway)

前言 开发 ChatGPT 应用,我觉得最前置的点就是能使用 ChatGPT API 接口。首先我自己要能成功访问,这没问题,会魔法就可以本地调用。 那用户如何调用到我的应用 API 呢,我的理解是通过用户能访问到的中转服务器向 OpenAI 发起访问…

[软件工具]文本去重含有重复的全部删除不是保留一个重复的方法

文本去重含有重复的全部删除不是保留一个重复的方法 第一步:首先打开软件 第二步:设置好保存目录后,将文件夹拖拽到列表,软件会自动识别导入txt 第三步:点击开始处理,即可完成任务 本软件支持批量处理&a…

Go1.21.0 程序启动过程

版本说明 Go 1.21.0操作系统:Windows11 Intel64 结论先行 开发关注版 在 Go 语言中,启动顺序通常如下: 导入包:首先,Go 编译器按照源文件中的 import 语句导入所有需要的包。初始化常量和变量:接着&am…