Python批量生成二维码(Pandas+Tkinter)

本文分享自己写的一个实用性的python小程序,非常简单,作用是能够从excel中读取一列数据然后生成对应的所有二维码,就姑且称之为批量生成二维码吧!

废话不多说,直接上代码

需要安装的模块

  • pandas
  • qrcode
  • xlrd
  • tkinter
  • numpy没有用到,可以删除

代码

代码部分很简单,也不长,而且做成了GUI式,只需要把库安装全了,直接运行就可以。
主要涉及的知识有

  • tkinter控件的使用
  • pandas读取excel
  • qrcode生成二维码
  • sys、os获取目录,保存文件
import os
import sys
import tkinter as tk
from tkinter import filedialog

import numpy as np
import pandas as pd
import qrcode

'''
批量生成二维码
'''

qr = qrcode.QRCode(
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=10,
    border=4
)


class run:
    def __init__(self, window):
        self.window = window
        self.label_path = tk.StringVar()
        self.curr_path = sys.path[0].replace('/', "\\")
        self.label_path.set('当前目录:'+self.curr_path)
        self.sheet_name = tk.StringVar()
        self.data_col = tk.StringVar()
        self.res_dir = tk.StringVar()
        self.label_res = tk.StringVar()
        self.gui()
        self.window.mainloop()

    def choose_file(self):
        file_name = filedialog.askopenfile(title='选择文件',
                                           filetypes=[("excel文件", "*.xlsx"),
                                                      ('excel2003文件', '*.xls')],
                                           initialdir='g:/')
        self.label_path.set('当前选择:'+file_name.name.replace('/', "\\"))

    def check_dir(self, dir):
        pathdir = self.curr_path+'\\'+dir
        isexit = os.path.exists(pathdir)
        if not isexit:
            os.makedirs(pathdir)
        return pathdir

    def insert_start(self, var):
        self.t4.insert(1.0, var)

    def start(self):
        sheet_name = self.sheet_name.get()
        data_col = self.data_col.get()
        res_dir = self.res_dir.get()
        path_dir = self.check_dir(res_dir)
        labelpath = self.label_path.get()[5::]
        df = pd.read_excel(labelpath, sheet_name=sheet_name)
        file = df.loc[:, [data_col]].values.ravel()
        i = 0
        for readline in file:
            qr.add_data(readline)
            qr.make(fit=True)
            img = qr.make_image()
            filename = str(readline)+'.png'
            readline = ''
            img.save(path_dir+'\\'+filename)
            qr.clear()
            i = i+1
            res = '\ndone No. '+str(i)
            self.insert_start(res)
            print('done No. '+str(i))
            self.window.update()
        res_total = 'sucess '+str(i)+'!'
        self.insert_start(res_total)
        print(res_total)
        self.window.update()

    def gui(self):
        # 路径label
        self.l0 = tk.Label(self.window, textvariable=self.label_path,
                           fg='black', height=2, wraplength=400,
                           justify='left', font=('Arial', 12))
        self.l0.place(x=20, y=0, anchor='nw')
        # 选择button
        self.btnChoose = tk.Button(self.window, text='选择excel文件', font=('Arial', 12),
                                   width=10, height=1, command=self.choose_file)
        self.btnChoose.place(x=480, y=5, anchor='nw')
        # edit
        self.l1 = tk.Label(self.window, text='请输入Sheet名:',
                           fg='black', height=2, font=('Arial', 12))
        self.l1.place(x=130, y=50, anchor='nw')
        self.e1 = tk.Entry(self.window, textvariable=self.sheet_name,
                           show=None, font=('Arial', 16))
        self.e1.place(x=260, y=60, anchor='nw')
        self.l2 = tk.Label(self.window, text='请输入数据列名:',
                           fg='black', height=2, font=('Arial', 12))
        self.l2.place(x=130, y=100, anchor='nw')
        self.e2 = tk.Entry(self.window, textvariable=self.data_col,
                           show=None, font=('Arial', 16))
        self.e2.place(x=260, y=110, anchor='nw')
        self.l3 = tk.Label(self.window, text='输出文件夹名称:',
                           fg='black', height=2, font=('Arial', 12))
        self.l3.place(x=130, y=150, anchor='nw')
        self.e3 = tk.Entry(self.window, textvariable=self.res_dir,
                           show=None, font=('Arial', 16))
        self.e3.place(x=260, y=160, anchor='nw')
        # 开始
        self.btnstart = tk.Button(self.window, text='开始生成', font=('Arial', 18),
                                  width=10, height=1, command=self.start)
        self.btnstart.place(x=240, y=200)

        # 结果展示
        self.t4 = tk.Text(self.window, width=600)
        self.t4.place(x=0, y=300)


if __name__ == '__main__':
    w = tk.Tk()
    w.title('批量生成二维码')
    w.geometry('600x600')
    r = run(w)

效果图

qr1.JPG

界面布局

很简单,两个button,一个label用来显示选择的excel文件,三个entry用来获取表单名、数据列名、输出文件夹名,一个text用来显示运行结果。

注意事项

1.表单名、数据列名称、输出文件夹名是必需的;
2.输出文件夹用来保存生成的二维码图片,保存在代码文件所在路径下。

源码地址:https://github.com/SevenJiao/GetMoreQrCode

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351