PyQt6简易案例代码GUI界面小工具——实现二维码生成器+自定义前后背景色(练手正合适)

news2024/9/20 18:48:24

目录

  • 专栏导读
  • PyQt6的介绍
    • PyQt6的主要特点包括:
    • 使用PyQt6开发应用程序的一般步骤:
  • 库的安装
  • 1、初始化与界面设计
  • 2、设置前景色、背景色功能
  • 完整代码
  • 总结

在这里插入图片描述

专栏导读

  • 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手

  • 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注

  • 👍 该系列文章专栏:请点击——>Python办公自动化专栏求订阅

  • 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅

  • 📕 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅

  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏

  • ❤️ 欢迎各位佬关注! ❤️

PyQt6的介绍

  • PyQt6是一个创建图形用户界面应用程序的工具包,它是Qt6的Python绑定。Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛用于开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。PyQt6使得Python程序员能够利用Qt的强大功能,轻松创建具有丰富功能和美观界面的应用程序。

PyQt6的主要特点包括:

  • 跨平台:可以在Windows、Linux、macOS等操作系统上运行。
  • 丰富的控件:提供了大量的控件(如按钮、标签、文本框等),方便开发者使用。
  • 强大的布局管理:提供了多种布局管理器,可以方便地对控件进行布局。
  • 事件处理:支持各种事件处理,如鼠标点击、键盘输入等。
  • 丰富的API:提供了大量的API,可以方便地进行各种开发操作。
  • 与Qt6的紧密集成:作为Qt6的Python绑定,PyQt6可以访问Qt6的所有功能。

使用PyQt6开发应用程序的一般步骤:

  • 安装PyQt6:可以通过pip安装PyQt6。
  • 导入必要的模块:从PyQt6.QtWidgets模块中导入应用程序、窗口等类。
  • 创建应用程序和窗口:创建一个QApplication对象和一个窗口对象。
  • 设置窗口:设置窗口的标题、大小等属性。
  • 添加控件:在窗口中添加各种控件,如按钮、文本框等。
  • 设置布局:使用布局管理器对控件进行布局。
  • 显示窗口:调用窗口的show()方法显示窗口。
  • 运行应用程序:调用QApplication对象的exec()方法运行应用程序。

库的安装

pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install qrcode -i https://pypi.tuna.tsinghua.edu.cn/simple/

1、初始化与界面设计

  • 定义了一个名为QRCodeGenerator的类,它是一个用于生成二维码的GUI应用程序。以下是各个部分的简要说明:
  • 构造函数 (__init__): 初始化窗口组件,设置默认的颜色值,并调用initUI来构建用户界面。
  • initUI 方法: 构建用户界面:
  • 设置窗口标题和位置大小。
  • 创建一个垂直布局layout。
  • 添加一个输入框input_line让用户输入要转换成二维码的文本。
  • 添加一个按钮generate_button,点击时触发generate_qr方法以生成二维码。
  • 添加一个标签qr_label用来显示生成的二维码图像。
  • 添加两个按钮分别用于设置二维码的前景色和背景色。
  • 将所有这些控件添加到布局中,并将该布局设置为窗口的主要布局。

2、设置前景色、背景色功能

  • 打开颜色选择对话框以设置前景色。 如果用户选择了有效颜色,则更新 `self.foreground_color`。
  • 使用颜色对话框获取用户选择的前景色
  • color = QColorDialog.getColor(self.foreground_color, self, "选择前景色")
  • 检查颜色是否有效
  • if color.isValid():
  • 更新前景色 self.foreground_color = color

完整代码

# -*- coding: UTF-8 -*-
'''
@Project :测试 
@File    :test.py
@IDE     :PyCharm 
@Author  :一晌小贪欢
@Date    :2024/8/7 14:06 
'''

import sys
import qrcode
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QPushButton, QLabel,QColorDialog
from PyQt6.QtGui import QPixmap,QColor
from PyQt6.QtCore import Qt
from PIL import Image, ImageDraw
import io


class QRCodeGenerator(QWidget):
    def __init__(self):
        super().__init__()
        self.foreground_color = QColor(0, 0, 0)  # 黑色
        self.background_color = QColor(255, 255, 255)  # 白色
        self.initUI()

    def initUI(self):
        # 设置窗口
        self.setWindowTitle('二维码生成器')
        self.setGeometry(100, 100, 400, 300)

        # 布局
        layout = QVBoxLayout()

        # 输入框
        self.input_line = QLineEdit(self)
        self.input_line.setPlaceholderText("请输入文本...")
        layout.addWidget(self.input_line)

        # 按钮
        self.generate_button = QPushButton('生成二维码', self)
        self.generate_button.clicked.connect(self.generate_qr)
        layout.addWidget(self.generate_button)

        # 显示二维码的标签
        self.qr_label = QLabel(self)
        self.qr_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
        layout.addWidget(self.qr_label)

        self.set_foreground_button = QPushButton('设置前景色', self)
        self.set_foreground_button.clicked.connect(self.set_foreground_color)
        layout.addWidget(self.set_foreground_button)

        self.set_background_button = QPushButton('设置背景色', self)
        self.set_background_button.clicked.connect(self.set_background_color)
        layout.addWidget(self.set_background_button)

        # 设置布局
        self.setLayout(layout)

    def set_foreground_color(self):
        color = QColorDialog.getColor(self.foreground_color, self, "选择前景色")
        if color.isValid():
            self.foreground_color = color

    def set_background_color(self):
        color = QColorDialog.getColor(self.background_color, self, "选择背景色")
        if color.isValid():
            self.background_color = color

    def generate_qr(self):
        # 获取输入框中的文本
        text = self.input_line.text()

        # 生成二维码
        qr = qrcode.QRCode(
            version=1,
            error_correction=qrcode.constants.ERROR_CORRECT_L,
            box_size=10,
            border=4,
        )
        qr.add_data(text)
        qr.make(fit=True)

        # 将二维码保存到字节流中
        img = qr.make_image(fill_color="black", back_color="white")
        byte_array = io.BytesIO()
        img.save(byte_array, 'PNG')
        byte_array.seek(0)

        # 将二维码图片转换为PIL Image对象
        img_pil = Image.open(io.BytesIO(byte_array.getvalue()))

        # 创建一个新的图片,用于应用颜色
        new_img = Image.new('RGB', img_pil.size, color=self.background_color.rgb())

        # 在新图片上绘制二维码,使用前景色
        draw = ImageDraw.Draw(new_img)
        for row in range(img_pil.size[1]):
            for col in range(img_pil.size[0]):
                if img_pil.getpixel((col, row)) != 0:  # 假设非零像素为黑色(二维码中的“数据”部分)
                    draw.point((col, row), fill=self.foreground_color.rgb())

                    # 将PIL Image对象转换为QPixmap并显示
        byte_arr = io.BytesIO()
        new_img.save(byte_arr, format='PNG')
        byte_arr.seek(0)
        pixmap = QPixmap()
        pixmap.loadFromData(byte_arr.read())
        self.qr_label.setPixmap(pixmap)



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = QRCodeGenerator()
    ex.show()
    sys.exit(app.exec())

总结

  • 希望对初学者有帮助

  • 致力于办公自动化的小小程序员一枚

  • 希望能得到大家的【一个免费关注】!感谢

  • 求个 🤞 关注 🤞

  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏

  • 求个 ❤️ 喜欢 ❤️

  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏

  • 求个 👍 收藏 👍

  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

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

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

相关文章

IP地址的构成

1. IPv4地址 IPv4地址是最早且目前仍然广泛使用的IP地址版本。由32位二进制数构成,应为32为二进制数太长了,所以我们通常用四个十进制数字来表示,每个数字之间用”.”分隔。这些数字的范围是0到255。IPv4地址的格式为: “A.B.C.…

2024世界机器人大会将于8月21日至25日在京举行

2024年的世界机器人大会预定于8月21日至25日,在北京经济技术开发区的北人亦创国际会展中心隆重举办。 本届大会以“共育新质生产力 共享智能新未来”为核心主题,将汇聚来自全球超过300位的机器人行业专家、国际组织代表、杰出科学家以及企业家&#xff0…

再启新征程——灵川县“灵秀山川”区域公共品牌发布会顺利举办

灵川县,自古便享有“楚越通衢,风气之先”的美誉,见证了无数文化的交流与融合。这里,土地肥沃,资源丰富,如同大自然的无尽宝库,孕育了琳琅满目的优质农特产品。立足于本地优势资源,灵…

Python | Leetcode Python题解之第329题矩阵中的最长递增路径

题目: 题解: class Solution:DIRS [(-1, 0), (1, 0), (0, -1), (0, 1)]def longestIncreasingPath(self, matrix: List[List[int]]) -> int:if not matrix:return 0rows, columns len(matrix), len(matrix[0])outdegrees [[0] * columns for _ in…

数字人直播间搭建教程比较:哪种方案更可行?

当前,数字人直播的应用潜力不断显现,各大中小型企业对其关注度和接受度持续上升,连带着各种数字人直播间搭建教程的阅读量也日益上涨。而不少创业者也因此发现了它所蕴含的市场需求和收益空间,并有了通过为企业搭建数字人直播间以…

三防平板定制化:驱动产业高效化发展的新动能

在数字化转型的浪潮中,三防平板作为一种坚固耐用、功能强大的移动设备,正逐渐成为各行各业提升效率、优化管理的关键工具。通过硬件和软件的定制化服务,三防平板不仅能满足特定行业的需求,更能在复杂的工作环境中展现出卓越的性能…

haproxy实验

目录 为什么要用haproxy? haproxy的基本部署实验: 环境准备: 详细步骤: haproxy-多进程与多线程实验: haproxy的全局global配置实验: 为什么要用haproxy? LVS:没有后端检测&a…

Linux学习笔记:Linux基础知识汇总(kill 进程-vi编辑检索-查看当前文件夹的大小-修复硬盘等)

常见指令 Linux 的 find 命令可以用于在指定目录下查找符合条件的文件或目录。find 命令的基本语法为: find [path] [expression]其中,path 指定要查找的目录路径,expression 指定查找条件。下面是一些常用的 find 命令用法和示例&#xff…

代理IP在社媒营销中的重要作用

伴随着互联网的发展,社交媒体成了人们日常生活中不可或缺的一部分。用户在社交媒体中的活跃度和对内容的分享促进信息内容在短期内迅速传播,使得社交媒体变成了店家推广与销售的重要途径。 随着社交媒体用户基数的不断扩大和社交平台功能的日益丰富&…

煤炭行业信息化运维方案:基于一体化监控管理平台的探讨

随着煤炭行业信息化和智能化进程的加速,煤炭企业面临着前所未有的运维挑战。如何在复杂多变的IT环境中确保系统的稳定运行,提高运维效率,降低运营成本,成为煤炭企业亟待解决的问题。本文将以煤炭行业信息化运维现状为背景&#xf…

C#如何将自己封装的nuget包引入到项目中

问题 自己封装好了一个nuget包,但是不想上传到外网,想局域网使用,有两种方案 搭建私有nuget仓库放到离线文件夹中直接使用 第一种方式请请参考proget安装 下面主要是第二种方式 准备 新建类库项目 using System;namespace ClassLibrary…

怎样才算精通 Excel?

最强AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 高赞回答很系统,但普通人这么学,没等精通先学废了! 4年前,我为了学数据分析&#…

关于低代码这一技术的杂谈

一、探讨低代码的定义 “Low-Code”是什么?身为技术人员听到这种技术名词,咱们第一反应就是翻看维基百科 或者其他相关技术论文,咱们想看维基百科的英文介绍: A low-code development platform (LCDP) provides a development e…

Angiopep-2;脑靶向多肽;TFFYGGSRGKRNNFKTEEY;CAS:906480-05-5

【Angiopep-2简介】 Angiopep-2是一种由19个氨基酸组成的多肽,它能够与低密度脂蛋白受体相关蛋白1(LRP1)特异性结合,通过内吞方式进入脑组织。这种多肽因其与LRP1的亲和力以及对血脑屏障的穿透能力而受到广泛关注,被认…

IF=12.5!孟德尔随机化,GWAS玩出花 | 孟德尔随机化周报(7.25-7.31)

孟德尔随机化,Mendelian Randomization,简写为MR,是一种在流行病学领域应用广泛的一种实验设计方法,利用公开数据库就能轻装上阵写文章,甚至是高质量的论文。 孟德尔随机化通过引入一个称之为工具变量的中间变量,来分析…

【C++】vector习题

一、杨辉三角 class Solution { public:vector<vector<int>> generate(int numRows) {} }; 这里给你一个vector<vector<int>>类型 也就是说vector中的各个数据&#xff0c;存的是各个不同的vector 思路&#xff1a;先给vector开空间&#xff0c;然后…

嘉德立为您解析任务调度控制台的核心功能

在当今高度信息化与自动化的时代背景下&#xff0c;任务调度控制台作为系统管理与运维的核心工具&#xff0c;正日益成为提升企业运营效率、保障业务连续性的关键所在。任务调度控制台&#xff0c;顾名思义&#xff0c;是一个集中管理、监控与调度各类任务的平台&#xff0c;它…

智能爬虫ScrapeGraphAI尝鲜

ScrapeGraphAI是一个创新的Python库&#xff0c;它融合了大型语言模型&#xff08;LLM&#xff09;和直接图逻辑&#xff0c;为用户提供了一种高效的方法&#xff0c;用于构建针对网站、文档和XML文件的爬虫流水线。以下是关于ScrapeGraphAI的详细介绍&#xff1a; 一、核心特…

【简历】黑龙某一本大学:JAVA秋招简历指导,面试通过率低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份25届黑龙江某一本大学的java简历。校招第一法则就是我们一定要先定求职层次&#xff0c;是大厂中厂还是小厂。因为校招时间点和…

达梦数据库(九) -------- JAVA 的连接配置方式

连接单机数据库配置如下&#xff1a; 集群配置连接如下&#xff1a; 在 dm_svc.conf 文件中配置服务名&#xff0c;通过服务名连接集群可实现故障自动重连。 Window 环境 Windows 平台 dm_svc.conf 文件位 %SystemRoot%\system32 目录下&#xff1a; Linux 环境 Linux 平台…