作者:天元浪子
1. 前言
我们通常所说的二维码,是指 Quick Response,简写为QR。QR 是近几年来移动设备上超流行的一种编码方式,它比传统的条形码(Bar Code)能存更多的信息,也能表示更多的数据类型。尽管在网上很容易找到各种各样的二维码生成器,但鲜有定制功能。接下来,我将手把手教大家用 wxPython 做一个可以指定前景、背景色以及中心插图的二维码生成器,并最终打包成一个exe程序。本文主要技术要点:
使用wxPython做桌面应用程序
将图标等资源文件隐藏到代码中
用pyinstaller打包成单一的可执行程序
二维码生成器界面如下图所示:

2. 二维码生成器代码
关于如何使用 wxPython 设计桌面程序,我在多篇博客里面均有讲述,这里不再赘述。主程序名为QrCreator.py,里面用到了一个图标文件,名为QrCreator.ico,和主程序在同一级目录下。请自备一个图标文件,并以QrCreator.ico命名。
QrCreator.py:
# -*- coding: utf-8 -*-import osimport wximport wx.lib.filebrowsebutton as filebrowseimport wx.lib.colourselect as cselfrom PIL import Imageimport qrcodeAPP_TITLE = "二维码生成器"WILDCARD = "PNG(*.png)|*.png|JPG(*.jpg)|*.jpg"class MainFrame(wx.Frame): """主窗口""" def __init__(self, parent=None): wx.Frame.__init__(self, parent, -1, APP_TITLE, size=(800, 500), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER|wx.MAXIMIZE_BOX)) icon = wx.Icon('QrCreator.ico') self.SetIcon(icon) # 设置图标 panel = wx.Panel(self, -1) # 顶级Panel leftPanel = wx.Panel(panel, -1) # 左侧Panel rightPanel = wx.Panel(panel, -1) # 右侧Panel line = wx.StaticLine(panel, -1, style=wx.VERTICAL) # 分隔线 sizer = wx.BoxSizer(wx.HORIZONTAL) # 顶级Sizer sizer.Add(leftPanel, 1, wx.EXPAND|wx.LEFT|wx.TOP|wx.BOTTOM, border=20) # 左侧Panel加入Sizer sizer.Add(line, 0, wx.EXPAND|wx.ALL, border=10) # 分隔线加入Sizer sizer.Add(rightPanel, 1, wx.EXPAND|wx.RIGHT|wx.TOP|wx.BOTTOM, border=20) # 右侧Panel加入Sizer panel.SetSizer(sizer) # 顶级Panel关联顶级Sizer panel.Layout()# 顶级Panel布局生效 self.InitLeftPanel(leftPanel) # 初始化左侧Panel self.InitRightPanel(rightPanel) # 初始化右侧Panel self.CenterOnScreen() # 窗口居中 def InitLeftPanel(self, panel): """初始化左侧窗口""" # 使用GridBagSizer布局左侧窗口 sizer = wx.GridBagSizer(5, 5) # 参数的意义是Sizer内的控件之间横向和纵向的像素间隔 # 二维码文本输入框 text = wx.StaticText(panel, -1, "文本:") sizer.Add(text, (0, 0)) self.tc = wx.TextCtrl(panel, -1, "", style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER) sizer.Add(self.tc, (1, 0), (1, 2), flag=wx.EXPAND) # 二维码大小滑块 text = wx.StaticText(panel, -1, "大小:") sizer.Add(text, (2, 0), flag=wx.TO