使用 Python 的二维码生成器

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本项目将指导你完成使用 Python 创建二维码生成器的过程。你将学习如何创建项目文件、导入所需库、定义二维码生成函数、定义二维码保存函数、创建二维码生成器界面的主窗口和元素,以及执行主函数。

👀 预览

二维码生成器界面预览

🎯 任务

在本项目中,你将学习:

  • 如何使用 Python 创建二维码生成器
  • 如何导入 qrcodetkinterPIL 等库
  • 如何定义生成和保存二维码的函数
  • 如何创建用于生成和保存二维码的用户界面

🏆 成果

完成本项目后,你将能够:

  • 使用 qrcode 库生成二维码
  • 使用 tkinter 库创建图形用户界面
  • 将生成的二维码保存到文件
  • 在画布上显示生成的二维码

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/FileHandlingGroup -.-> python/file_opening_closing("Opening and Closing Files") python/FileHandlingGroup -.-> python/file_operations("File Operations") subgraph Lab Skills python/function_definition -.-> lab-298900{{"使用 Python 的二维码生成器"}} python/importing_modules -.-> lab-298900{{"使用 Python 的二维码生成器"}} python/using_packages -.-> lab-298900{{"使用 Python 的二维码生成器"}} python/standard_libraries -.-> lab-298900{{"使用 Python 的二维码生成器"}} python/classes_objects -.-> lab-298900{{"使用 Python 的二维码生成器"}} python/file_opening_closing -.-> lab-298900{{"使用 Python 的二维码生成器"}} python/file_operations -.-> lab-298900{{"使用 Python 的二维码生成器"}} end

创建项目文件

首先,创建一个名为 qr_code_generator.py 的新文件,并在你喜欢的代码编辑器中打开它。

cd ~/project
touch qr_code_generator.py
✨ 查看解决方案并练习

导入所需的库

qr_code_generator.py 文件中,在代码开头导入以下库:

import qrcode
import tkinter as tk
from tkinter import messagebox, filedialog
from PIL import ImageTk, Image
import os

使用以下命令安装所需的库:

pip3 install qrcode pillow
✨ 查看解决方案并练习

定义二维码生成函数

添加以下代码以定义一个名为 generate_qr 的函数,该函数接受一个文本参数并生成一个二维码图像:

def generate_qr(text):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=10,
        border=4,
    )
    qr.add_data(text)
    qr.make(fit=True)

    img = qr.make_image(fill='black', back_color='white')
    filename = 'qr_code.png'
    img.save(filename)
    return filename

在上述代码中,我们使用 qrcode 库生成一个二维码图像。generate_qr 函数接受一个文本参数,该参数是二维码将包含的文本或 URL。然后,该函数使用指定的版本、纠错级别、方块大小和边框创建一个二维码对象。接着,将文本添加到二维码对象中,并生成二维码图像并保存到名为 qr_code.png 的文件中。最后,该函数返回生成的二维码图像的文件名。

✨ 查看解决方案并练习

定义二维码保存函数

接下来,添加以下代码以定义一个名为 save_qr 的函数,该函数允许用户保存生成的二维码:

def save_qr(filename):
    filepath = filedialog.asksaveasfilename(defaultextension='.png', filetypes=[('PNG Images', '*.png')])

    if filepath:
        os.rename(filename, filepath)
        messagebox.showinfo('QR Code Saved!')

该函数接受一个文件名参数,即生成的二维码图像的文件名。然后,该函数会打开一个文件对话框,允许用户选择保存二维码图像的位置和文件名。如果用户选择了一个位置和文件名,该函数会将生成的二维码图像重命名为所选的文件名,并显示一个消息框通知用户二维码已保存。

✨ 查看解决方案并练习

创建主窗口和元素

现在,添加以下代码来定义一个名为 create_window 的函数,该函数创建二维码生成器界面所需的主窗口、标签、输入字段、画布和按钮:

def create_window():
    window = tk.Tk()
    window.title('QR Code Generator')

    label = tk.Label(window, text='Enter the text/URL:')
    label.pack()

    ent = tk.Entry(window)
    ent.pack()

    canvas = tk.Canvas(window, width=200, height=200)
    canvas.pack()

    def generate_and_display():
        text = ent.get()
        filename = generate_qr(text)
        photo = ImageTk.PhotoImage(Image.open(filename))
        canvas.create_image(100, 100, image=photo)
        button2 = tk.Button(window, text='Save QR Code', command=lambda: save_qr(filename))
        button2.pack()
        window.mainloop()

    button = tk.Button(window, text='Generate QR Code', command=generate_and_display)
    button.pack()

    window.mainloop()

我们使用 tkinter 库来创建主窗口、标签、输入字段、画布和按钮。create_window 函数创建主窗口,并添加一个标签和输入字段,供用户输入二维码将包含的文本或 URL。该函数还创建一个画布,用于显示生成的二维码图像。然后,该函数定义一个名为 generate_and_display 的嵌套函数,该函数从输入字段获取文本,生成二维码图像,并在画布上显示二维码图像。该函数还创建一个按钮,允许用户保存生成的二维码图像。最后,该函数创建一个按钮,点击时调用 generate_and_display 函数。

✨ 查看解决方案并练习

执行主函数

最后,添加以下代码,以便在运行文件时执行 create_window 函数:

if __name__ == '__main__':
    create_window()
    generate_qr('Hello World!')

if __name__ == '__main__' 代码块确保只有在运行文件时才执行 create_window 函数,而不是在作为模块导入时执行。该代码块还调用 generate_qr 函数来生成一个包含文本“Hello World!”的二维码图像。

python qr_code_generator.py
QR code generation output
✨ 查看解决方案并练习

总结

你已经成功地使用 Python 创建了一个二维码生成器。通过完成这个循序渐进的项目,你学会了如何创建项目文件、导入必要的库、定义生成和保存二维码的函数、使用 Tkinter 创建用户界面,以及运行项目来生成和显示二维码。