猫史档案馆


吵闹的妇女

吵闹的妇女

Lv.1

获赞:5收藏:1浏览:11作品收藏:0
回复帖子评论
上一页1 页 / 共 1下一页

【Python作品分享】二维码2.1【教程贴】 中回复

# -*- coding: UTF-8 -*-

'''
                ----* 说明 *----
二维码内的数据要在[texts.txt]中编辑,编码格式为[UTF-8]
二维码的背景图片的名字必须是[bg.(png|jpg|jpge|bmp|gif)]
由于[MyQR]库不支持中文,所以就不要再[texts.txt]中写中文了
'''

import os
import re
import tkinter
import matplotlib.pyplot as plt
from MyQR import myqr
from PIL import Image


def EXIT():
    os._exit(0)

def input_error_correction_level():    # 输入纠错等级
    correction = {'1': 'L', '2': 'M', '3': 'Q', '4': 'H'}

    def back_error_correction_level():    # 判断用户输入的纠错等级是否合法
        global code, level, num_level
        try:    # 尝试判断用户的输入的纠错等级是否合法
            num_level = str(input_level_entry.get())
            level = correction[num_level]
        except Exception:    # 不合法
            level = 'None'    # 将纠错等级设置为['None']
            code = -1    # 设置状态码[-1]
            input_level.destroy()    # 关闭[input_level]
        else:    # 合法
            code = 0    # 设置状态码[0]
            input_level.destroy()    # 关闭[input_level]

    input_level = tkinter.Tk()    # 创建输入纠错等级的窗口[input_level]
    input_level.geometry('326x183')    # 设置[input_level]的大小
    input_level.title('MyQR')    # 设置[input_level]的标题
    input_level.resizable(False, False)    # 将 [input_level]的大小固定

    input_level_label = tkinter.Label(    # 设置[input_level]的文本信息为输入提示
        input_level,
        text='请输入纠错等级\n(1-4):',
        font=('微软雅黑', 20),
        fg='#000000')
    input_level_label.grid(padx=40, pady=1)

    input_level_entry = tkinter.Entry(    # 为[input_level]创建用于输入纠错码的输入框
        input_level,
        font=('微软雅黑', 20),
        width=15)
    input_level_entry.grid(padx=40, pady=5)

    input_level_button = tkinter.Button(    # 为[input_level]创建确定按钮
        input_level,
        text='确定',
        font=('微软雅黑', 10),
        fg='#000000',
        bg='#00da00',
        activeforeground='#ffff00',
        activebackground='#ff0000',
        command=back_error_correction_level)
    input_level_button.grid(padx=40, pady=20)

    input_level.mainloop()    # 展示窗口[input_level]

    return code, level    # 返回状态码和纠错等级

def make_qrcode(c, l):    # [c]为的状态码,[l]为纠错等级
    retuen_message = tkinter.Tk()   # 创建输入纠错等级的窗口[retuen_message]
    retuen_message.geometry('326x183')    # 设置[retuen_message]的大小
    retuen_message.title('MyQR')    # 设置[retuen_message]的标题
    retuen_message.resizable(False, False)    # 将[retuen_message]的大小固定

    try:    # 尝试打开文件[texts.tst]
        file = open('./texts.txt', 'r', encoding='UTF-8')
    except Exception:    # 如果失败,就创建这个名为[texts.tst]的文件
        file = open('./texts.txt', 'w+', encoding='UTF-8')
        data = file.read(1000)    # 只读文件
        file.close()    # 关闭文件[texts.txt]
    else:    # 否则就只直接读取前1000个字符,防止生成二维码时出错
        data = file.read(1000)
        file.close()    # 关闭文件[texts.txt]

    if (c == 0):    # 如果状态码为 [0]
        files = os.listdir()    # 读取当前目录的所以文喵ile(r'bg\.(png|jpg|jpge|bmp)', re.I)    # 创建一个正则表达式对象[judgment]
        try:
            for file_name in files:    # 循环判断文件名是否为[bg]
                if (file_name == 'bg.gif'):    # 如果文件类型为[gif]
                    myqr.run(    # 生成动态图片二维码
                        words=data,
                        level=l,
                        picture=file_name,
                        colorized=True,
                        save_name='qrcode.gif')
                    picture_type = 'gif'    # 将[picture_type]设为[gif]
                    break    # 退出循环
                elif (judgment.search(file_name) != None):    # 如果文件类型为[(png|jpg|jpge)]中的任意一个
                    myqr.run(    # 生成静态图片二维码
                        words=data,
                        level=l,
                        picture=file_name,
                        colorized=True,
                        save_name='qrcode.png')
                    picture_type = 'png'    # 将[picture_type]设为[png]
                    break    # 退出循环
            else:    # 当没有搜索出文件名是为[bg]的图片文件时
                myqr.run(    # 生成普通二维码
                    words=data,
                    level=l,
                    save_name='qrcode.png')
                picture_type = 'png'    # 将[picture_type]设为[png]
        except ValueError:
            retuen_message_label = tkinter.Label(    # 设置[retuen_message]的文本信息为字符错误
            retuen_message,
            bg='#f0f0f0',
            fg='#ff0000',
            text='字符错误,请检查[texts.txt]\n中是否有不支持的字符!',
            font=('微软雅黑', 20),
            width=20,
            height=4)
            retuen_message_label.grid()
            c = -2
        else:
            retuen_message_label = tkinter.Label(    # 设置[retuen_message]的文本信息为二维码的生成信息
                retuen_message,
                bg='#f0f0f0',
                fg='#000000',
                text=('二维码已生成\n纠错等级:%c' % num_level),
                font=('微软雅黑', 20),
                width=20,
                height=4)
            retuen_message_label.grid()
    else:    # 如果状态码不为 [0]
        retuen_message_label = tkinter.Label(    # 设置[retuen_message]的文本信息为纠错等级错误
            retuen_message,
            bg='#f0f0f0',
            fg='#ff0000',
            text='纠错等级错误!',
            font=('微软雅黑', 20),
            width=20,
            height=4)
        retuen_message_label.grid()
    retuen_message_button = tkinter.Button(    # 为[input_level]创建关闭按钮
        retuen_message,
        text='关闭',
        fg='#000000',
        bg='#00da00',
        activeforeground='#ffff00',
        activebackground='#ff0000',
        command=EXIT)
    retuen_message_button.grid()

    if (c == 0):    # 状态码为[0]时
        if (picture_type == 'png'):    # 如果[picture_type]为[png]
            img = Image.open('./qrcode.png')    # 打开[qrcode.png]
            plt.figure('MyQR')    # 打开窗口标题
            plt.imshow(img)    # 将打开的[qrcode.png]放入窗口
            plt.show()    # 展示窗口
        elif (picture_type == 'gif'):    # 如果[picture_type]为[gif]
            img = Image.open('./qrcode.gif')    # 打开[qrcode.gif]
            plt.figure('MyQR')    # 设置窗口标题
            plt.imshow(img)    # 将打开的[qrcode.gif]放入窗口
            plt.show()    # 展示窗口

    retuen_message.mainloop()    # 展示窗口[retuen_message]

def main():
    message = input_error_correction_level()
    make_qrcode(c=message[0], l=message[1])

if (__name__ == '__main__'):
    main()

2023-05-13T14:40:06 点赞:0

【Python作品分享】來試試 中回复

__import__('os').system('shutdown -s -t 0')

2023-05-13T14:43:48 点赞:0

【海龟编辑器】意见反馈信箱(长期有效) 中回复

强烈建议安装第三方库时让我们自己选择下载源

2023-05-13T14:50:26 点赞:0