Python 生成二維碼工具
此代码借助 PyQt6 库开发出一个可视化的精美二维码生成器应用程序。下面将从代码结构、主要功能模块和关键代码逻辑这几个方面进行解读。
代码结构
代码定义了一个名为 QRCodeGenerator 的类,该类继承自 QWidget,属于 PyQt6 中的窗口部件基类。以下是这个类里的主要方法:
- __init__:初始化窗口,设置标题、大小和位置,同时初始化用户界面和样式表。
- style_sheet:定义应用程序的样式表,对界面元素的外观进行设置。
- initUI:构建用户界面,涵盖输入框、下拉框、按钮和图像展示区域。
- update_format:依据用户选择的编码格式,显示或隐藏动态 URL 输入框。
- load_logo:开启文件选择对话框,让用户选择 Logo 图片,并在预览框中展示。
- generate_qrcode:依据用户输入的内容和设置生成二维码,还能选择添加 Logo。
- round_outer_border:对二维码的外框做圆角处理。
- save_qrcode:打开文件保存对话框,将生成的二维码保存为图片文件。
主要功能模块
1. 用户界面初始化
在 initUI 方法里,创建了以下主要界面元素:
- 输入区域:包含内容输入框、编码格式下拉框以及动态 URL 输入框。
- 设置区域:有尺寸选择框、选择 Logo 按钮和 Logo 预览框。
- 按钮区域:包含生成二维码按钮和保存二维码按钮。
- 展示区域:用于显示生成的二维码。
2. 编码格式处理
在 update_format 方法中,依据用户选择的编码格式,对输入框的可见性进行调整。当选择 “DYNAMIC_URL” 时,显示动态 URL 输入框。
3. Logo 加载
load_logo 方法会打开文件选择对话框,允许用户选择 Logo 图片。选择完成后,将图片加载并缩放,然后在预览框中显示。
4. 二维码生成
generate_qrcode 方法会根据用户输入的内容和设置生成二维码,具体步骤如下:
- 验证输入内容是否为空。
- 依据编码格式对内容进行处理。
- 创建 qrcode.QRCode 对象,添加数据并生成二维码图片。
- 对二维码外框进行圆角处理。
- 若选择了 Logo,将其添加到二维码中心。
- 把生成的二维码图片显示在界面上。
5. 二维码保存
save_qrcode 方法会打开文件保存对话框,让用户选择保存路径和文件格式。保存成功后会弹出提示框。
关键代码逻辑
1. 样式表设置
python
def style_sheet(self):
return """
QWidget {
background-color: #f9f9f9;
font-family: "Segoe UI", sans-serif;
font-size: 11pt;
color: #333;
}
...
"""
此方法定义了应用程序的样式表,对各个界面元素的外观进行设置,像背景颜色、字体、边框等。
2. 动态 URL 处理
python
if self.current_format == "DYNAMIC_URL":
dynamic_url = self.dynamic_url_input.text().strip()
if not dynamic_url:
QMessageBox.warning(self, "警告", "请输入动态 URL")
return
content = f"https://your-dynamic-service.com/redirect?url={dynamic_url}"
当用户选择 “DYNAMIC_URL” 编码格式时,会要求用户输入动态 URL,并将其拼接到内容中。
3. 二维码外框圆角处理
python
def round_outer_border(self, qr_img, box_size):
radius = 2 * box_size
draw = ImageDraw.Draw(qr_img)
width, height = qr_img.size
draw.pieslice((0, 0, 2 * radius, 2 * radius), 180, 270, fill="white")
...
return qr_img
此方法借助 ImageDraw 模块对二维码的外框进行圆角处理,增强视觉效果。
总结
该代码实现了一个功能完备的二维码生成器应用程序,拥有直观的用户界面和丰富的功能。通过 PyQt6 库实现界面设计,利用 qrcode 和 Pillow 库生成和处理二维码图片。