1 前言

在如今信息发达的时代,二维码已经是人们生活中不可或缺的东西。比如几乎每天都要用的微信或支付宝支付。那么如何可以制作一个二维码呢?小编将在本文中给大家分享一个自制的二维码生成器。

2 准备

这个二维码生成器是由qrcode(生成二维码)库与tkinter(图形ui界面)组成的。首先先在命令行安装以下三个模块,分别是qrcode、image、pillow(PIL)。安装方式很简单。

pip install qrcode

pip install image

pip install pillow

安装完整过后直接在py文件中导入以下模块和方法:

from tkinter import *

from tkinter.filedialog import *

from PIL import Image,ImageTk

import qrcode

3 具体步骤

3.1 编写ui界面

导入模块后直接用tkinter模块编写ui界面。小编这里的ui界面为:

图3.1ui界面

具体代码如下:

root = Tk()

root.title("二维码生成器")

root.geometry('600x400+400+100')

button1 = Button(root,text = '选择图标',font = ('宋体',20),fg = 'green',bg = 'white',command = openfile)#设置按钮

button2 = Button(root,text = '保存二维码',font = ('宋体',20),fg = 'green',bg = 'white',command = savefile)#设置按钮

button1.place(x = 90,y = 330,width = 120,height = 50)#显示按钮

button2.place(x = 385,y = 330,width = 150,height = 50)#显示按钮

label1 = Label(root,text = '输入链接',font = ('宋体',20),fg = 'black',bg = 'white')#设置组件

label1.place(x = 235,y = 5,width = 130,height = 50)

entry1 = Entry(root,font = ('宋体',20))#设置输入框

entry1.place(x = 50,y = 60,width = 510,height = 30)#显示组件

canvas1 = Canvas(root,width = 300,height = 300,bg = "white")#创建画布

canvas2 = Canvas(root,width = 300,height = 300,bg = "white")#创建画布

canvas1.place(x = 50,y = 100,width = 200,height = 200)

canvas2.place(x = 360,y = 100,width = 200,height = 200)

button = Button(root,text = '生成',font = ('宋体',15),fg = 'black',bg = 'pink',command = creat)#设置按钮

button.place(x = 280,y = 200,width = 50,height = 40)#显示按钮

root.mainloop()

Tkinter的基础用法此公众号内有相关用法,可以搜索关键词tkinter阅读。

这里只简单说一下部分方法及参数的含义。

Button()方法为创建一个按钮组件,其中command为点击按钮绑定的事件(函数方法)。

place()为一种布局方式,参数x,y为相对ui界面的坐标,width和height为显示宽高。

Label()为显示文字组件,例如图3.1中的“输入链接”。

Entry()为输入框组件,这里用于接收链接。使用entry.get()获取其中的内容。

Canvas()为画布组件,这里用于展示图标和二维码。

font参数为字体。其中可以设置字体样式和大小。

3.2 生成二维码

程序的ui界面就已经写好了,最后只需要完成按钮中的comman参数就好了。分别有三个方法。先来看选择图标。

def openfile():

global filename,image_name

filename = askopenfilename()

image_name = Image.open(filename)

image_name = image_name.resize((200, 200), Image.ANTIALIAS)#缩放图片

im_root = ImageTk.PhotoImage(image_name)  # 预设打开的图片

canvas1.create_image(100,100,image=im_root)  # 嵌入预设的图片

canvas1.place(x = 50,y = 100,width = 200,height = 200)

root.mainloop()

这里面只说一下askopenfilename(),这是tikinter模块中filedialog类的一个方法,返回的是你当前选择文件的路径。然后利用image模块将此图片打开并按照要求缩放,最终展示在画布上。

图3.2选取图片

图3.3展示图片

然后是生成函数:

def creat():

global img

qr = qrcode.QRCode(

version=2,

error_correction=qrcode.constants.ERROR_CORRECT_Q,

box_size=10,

border=1)

url = entry1.get()

qr.add_data(url)

qr.make(fit=True)

img = qr.make_image()

img = img.convert("RGBA")

icon = image_name

icon = icon.convert("RGBA")

imgWight, imgHeight = img.size

iconWight = int(imgWight / 3)

iconHeight = int(imgHeight / 3)

icon = icon.resize((iconWight, iconHeight), Image.ANTIALIAS)

posW = int((imgWight - iconWight) / 2)

posH = int((imgHeight - iconHeight) / 2)

img.paste(icon, (posW, posH), icon)

img1 = img.resize((200, 200), Image.ANTIALIAS)

im_root = ImageTk.PhotoImage(img1)  # 预设打开的图片

canvas2.create_image(100,100,image=im_root)  # 嵌入预设的图片

canvas2.place(x = 360,y = 100,width = 200,height = 200)

root.mainloop()

其中qr部分为二维码的配置。

version参数是从1到40,其控制QR码的大小的整数(最小的,版本1,是一个21×21矩阵)。设置为None并在使代码自动确定时使用fit参数。

error_correction参数控制用于QR码的误差校正。在qrcode 软件包中提供了以下四个常量:

ERROR_CORRECT_L

可以纠正大约7%或更少的错误。

ERROR_CORRECT_M(默认)

可以纠正大约15%或更少的错误。

ERROR_CORRECT_Q

可以纠正大约25%或更少的错误。

ERROR_CORRECT_H。

可以纠正大约30%或更少的错误。

box_size参数控制每个二维码格子中有多少个像素。

border参数控制边界应多少盒厚是(默认为4,这是最低根据规范)。

add_data()为二维码的链接,这里直接获取输入框中的内容。

然后后面的内容都为控制图标与二维码的相对大小和位置。以上这部分的参数均来自qrcode的官方文档。详情请到官网查看:https://pypi.org/project/qrcode/5.1/

该方法写好后输入链接,点击生成,就可以生成一个带图标的二维码了。

图3.4生成二维码

最后是保存二维码:

def savefile():

pathname = asksaveasfilename(defaultextension = '.png',initialfile = '新的二维码.png')

img.save(pathname)

其中的asksavesfilename同样是返回文件保存的路径,后面两个参数依次是默认图片格式、默认文件名。最后点击保存二维码即可大功告成。

图3.5保存二维码

最后打开保存的文件夹,检查一下,发现成功生成了二维码。

3.6查看二维码

4 完整代码

from tkinter import *

from tkinter.filedialog import *

from PIL import Image,ImageTk

import qrcode

def openfile():

global filename,image_name

filename = askopenfilename()

image_name = Image.open(filename)

image_name = image_name.resize((200, 200), Image.ANTIALIAS)#缩放图片

im_root = ImageTk.PhotoImage(image_name)  # 预设打开的图片

canvas1.create_image(100,100,image=im_root)  # 嵌入预设的图片

canvas1.place(x = 50,y = 100,width = 200,height = 200)

root.mainloop()

def creat():

global img

qr = qrcode.QRCode(

version=2,

error_correction=qrcode.constants.ERROR_CORRECT_Q,

box_size=10,

border=1)

url = entry1.get()

qr.add_data(url)

qr.make(fit=True)

img = qr.make_image()

img = img.convert("RGBA")

icon = image_name

icon = icon.convert("RGBA")

imgWight, imgHeight = img.size

iconWight = int(imgWight / 3)

iconHeight = int(imgHeight / 3)

icon = icon.resize((iconWight, iconHeight), Image.ANTIALIAS)

posW = int((imgWight - iconWight) / 2)

posH = int((imgHeight - iconHeight) / 2)

img.paste(icon, (posW, posH), icon)

img1 = img.resize((200, 200), Image.ANTIALIAS)

im_root = ImageTk.PhotoImage(img1)  # 预设打开的图片

canvas2.create_image(100,100,image=im_root)  # 嵌入预设的图片

canvas2.place(x = 360,y = 100,width = 200,height = 200)

root.mainloop()

def savefile():

pathname = asksaveasfilename(defaultextension = '.png',initialfile = '新的二维码.png')

img.save(pathname)

root = Tk()

root.title("二维码生成器")

root.geometry('600x400+400+100')

button1 = Button(root,text = '选择图标',font = ('宋体',20),fg = 'green',bg = 'white',command = openfile)#设置按钮

button2 = Button(root,text = '保存二维码',font = ('宋体',20),fg = 'green',bg = 'white',command = savefile)#设置按钮

button1.place(x = 90,y = 330,width = 120,height = 50)#显示按钮

button2.place(x = 385,y = 330,width = 150,height = 50)#显示按钮

label1 = Label(root,text = '输入链接',font = ('宋体',20),fg = 'black',bg = 'white')#设置组件

label1.place(x = 235,y = 5,width = 130,height = 50)

entry1 = Entry(root,font = ('宋体',20))#设置输入框

entry1.place(x = 50,y = 60,width = 510,height = 30)#显示组件

canvas1 = Canvas(root,width = 300,height = 300,bg = "white")#创建画布

canvas2 = Canvas(root,width = 300,height = 300,bg = "white")#创建画布

canvas1.place(x = 50,y = 100,width = 200,height = 200)

canvas2.place(x = 360,y = 100,width = 200,height = 200)

button = Button(root,text = '生成',font = ('宋体',15),fg = 'black',bg = 'pink',command = creat)#设置按钮

button.place(x = 280,y = 200,width = 50,height = 40)#显示按钮

root.mainloop()

最后你还可用小编之前分享过的关于Python文件打包的方法,将该程序打包成exe文件,方便自己和他人使用。

Python实现二维码生成器相关推荐

  1. 标星7000+,这个 Python 艺术二维码生成器厉害了!

    微信二维码,相信大家也并不陌生,为了生成美观的二维码,许多用户都会利用一些二维码生成工具. 今天推荐给大家一个有趣的开源项目--Python二维码生成器(目前7.3K Star, GitHub项目地址 ...

  2. Python|自制二维码生成器

    1 前言 在如今信息发达的时代,二维码已经是人们生活中不可或缺的东西.比如几乎每天都要用的微信或支付宝支付.那么如何可以制作一个二维码呢?小编将在本文中给大家分享一个自制的二维码生成器. 多人学习py ...

  3. [Python]Tkinter-GUI二维码生成器

    基于tkinter.qrcode设计的二维码生成器.用于提高网址等少量文本由PC端向手机端传输的效率问题.支持二维码的尺寸.容错率.像素密度.Logo图片设置,以及参数纠错.二维码的大图查看和保存. ...

  4. 如何用【Python】制作一个二维码生成器

    前言 二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方 式,它比传统的Bar Code条形码能存更多的信息,也能表示更 ...

  5. 如何用Python制作一个简单的二维码生成器

    目录 前言 1.安装第三方库 2.QRCode参数解释 3.自定义二维码生成器 4.给二维码加图片 5.全部代码 6.结果 前言 二维码又称二维条码,常见的二维码为QR Code,QR全称Quick ...

  6. 用python制作简单的二维码生成器

    疫情当下,如何制作一个这样的简单"绿码"呢?(当然不能当健康码用) 首先,你需要准备好这些python库,有些库python自带,如果没有可以pip install自行安装 imp ...

  7. Python二维码生成器

    二维码是我们生活中非常常用的东西,几乎无处不在,你可以通过二维码支付,传输数据,传输文本等.但想要生成自己的二维码又非常麻烦,需要用别人的软件,这些很多不可靠甚至有病毒,所以作为技术人员的我们还是要靠 ...

  8. python pyside2 基于qrcode的库二维码生成器

    自学了两天python的pyside2界面制作,因为和matlab app designer很相似所以入手比较快,二维码生成器是基本上手后制作的 第一个pyside2小项目,也参考了很多人的文章 原本 ...

  9. 【Python爬虫】用Python爬虫做一个二维码生成器,20行代码轻松实现

    python爬虫不止可以批量下载数据,还可以有很多有趣的应用,之前也发过很多,比如天气预报实时查询.cmd版的实时翻译.快速浏览论坛热门帖等等,这些都可以算是爬虫的另一个应用方向! 今天给大家分享一个 ...

  10. 用python爬虫做一个二维码生成器

    python爬虫不止可以批量下载数据,还可以有很多有趣的应用,之前也发过很多,比如天气预报实时查询.cmd版的实时翻译.快速浏览论坛热门帖等等,这些都可以算是爬虫的另一个应用方向! 今天给大家分享一个 ...

最新文章

  1. (2.2)HarmonyOS鸿蒙页面跳转
  2. selenium用法详解
  3. Objective-C 2.0 with Cocoa Foundation 1 前言
  4. python正确打开方式_Python log 的正确打开方式
  5. 探究京东商城的数据建模
  6. 爱心的数学函数方程_笛卡尔的爱心函数
  7. 产品经理面试常见问题及答案参考总结(一)
  8. 万网如何修改dns服务器,万网域名如何修改DNS设置方法
  9. SRAM VS DRAM
  10. torch.optim.lr_scheduler源码和cosine学习率策略学习
  11. 软件测试面试101问(附答案)
  12. j2ee使用struts实现用户的登陆及注册
  13. pandas结合matplotlib将excel数据可视化
  14. HDOJ---1431 素数回文[素数筛选+ltoa函数(将长整形转换成字符数组)+打表]
  15. 电脑摄像头一会好使一会不好使
  16. 好习惯是成功的关键(最经典的成功思维)
  17. 单行、多行 注释.HTML
  18. Windows编程画太极图
  19. C/C++的左值和右值
  20. 微凉日子,菠菜鸡丝面

热门文章

  1. 《开店有讲究》读书笔记
  2. 传教士与野人问题深度优先搜索算法(DFS)-Python实现
  3. 在自己电脑上无法用Foxmail客户端登录126邮箱的解决办法
  4. 植发搞笑图片_搞笑:终于找到原图了!像不像?
  5. 共享图书横空出世一本书看十天只需一块钱
  6. 罗永浩怒怼新浪科技,或将起诉
  7. 在ROS中创建工作区时出现错误
  8. java身份证号码验证
  9. android 华为 imei,华为手机EMUI系统查看S/N IMEI/MEID 产品识别码的方法
  10. 计算机毕业设计springboot+vue基本微信小程序的考试系统