1 前言

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

多人学习python,不知道从何学起。

很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。

很多已经做案例的人,却不知道如何去学习更加高深的知识。

那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤

QQ群:1057034340

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 文件,方便自己和他人使用。

END

Python|自制二维码生成器相关推荐

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

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

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

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

  3. 利用PyQt5制作简易二维码生成器

    先来看看效果,主界面大概就是这个样子: 生成成功界面: 生成失败界面: 细节我后面会详细说 首先 pip install pyqt5 然后在pycharm中配置pyqt5,详情请参考这里 三个界面的搭 ...

  4. Python开发:编写ui界面,制作二维码生成器

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于云+社区,作者 算法与编程之美 转载地址 https://blog ...

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

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

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

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

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

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

  8. Python二维码生成器

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

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

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

最新文章

  1. Hadoop机架感知与balancer
  2. 【赠书】图神经网络优质书籍,送你3本进行学习
  3. 虎扑签约神策数据,媒体 + 电商数据新玩法
  4. JavaScript 表格专题
  5. “滴血验癌”?昔日“女乔布斯”被控诈骗!身价估值从290亿元直降为0!或面临20年刑期...
  6. 农夫山泉终于“玩砸了”
  7. oracle索引online样例,在线创建索引的问题案例
  8. mysql win linux性能对比,不同系统上 MySQL 的性能对比
  9. 【搬运】卡尔曼滤波详解及实例
  10. pytorch数据增强
  11. java 对象值拷贝_Java 值传递与对象拷贝
  12. vue 项目 upload上传图片 并实现拖拽排序
  13. 用计算机怎么发邮件,怎么用qq邮箱发文件-你必须要学会的电脑操作——邮件收发...
  14. psp android 模拟器,安卓psp模拟器
  15. 74hc595点亮点阵式led交通灯灯 c语言程序,74hc595驱动点阵程序
  16. 基于Python的“书怡”在线书店系统的设计与实现毕业设计源码082332
  17. 以太网的网络电缆线被拔出怎么解决
  18. 了解过什么是 DDD吗?一文带你掌握!(至尊典藏版)
  19. 2017-2018-1 20155228 《信息安全系统设计基础》第一周学习总结
  20. Cramer悖论:线性代数的萌芽

热门文章

  1. 人生是一场秋花的盛开
  2. Python基础必掌握的Traceback回溯机制操作详解
  3. Java poi XWPFDocument 操作2007Word,实现参数替换、新增 插入 替换 表格数据、创建饼状图、柱形图、折线图
  4. 深度学习【道路提取】:马萨诸塞州道路数据集分享
  5. 商品租赁系统(Java_类/接口/继承/多态)
  6. Invalid header signature; read 0x3C0A0D0A0DBFBBEF, expected 0xE11AB1A1E011CFD0
  7. jsp简易的图书管理系统
  8. Linkerd 2.9发布:全面支持mTLS与ARM!
  9. springboot+vue+elementui大学生社团活动报名系统平台
  10. CH340驱动安装失败 win10