先来看看效果,主界面大概就是这个样子:
生成成功界面:
生成失败界面:
细节我后面会详细说
首先
pip install pyqt5
然后在pycharm中配置pyqt5,详情请参考这里
三个界面的搭建都可以用pyuic直接生成.py文件,然后设置一个主文件mainwindow.py直接调用就可以(源码链接我会放在最后)。
然后说说二维码的生成:
看我上面的窗口截图,有三种二维码样式,其中样式1和样式二用到的是qrcode库,样式三用到的是myqr库。
# pip install qrcode
import qrcode
# pip install myqr
from MyQR import myqr
其中qrcode可以生成普通二维码以及中间带有图标的二维码,二维码内容支持中英文;myqr可以生成以某张.png图片或.gif动态图为背景的二维码,但是二维码内容不支持中文,只支持英文以及一系列字符。
另外为了方便与二维码的生成与界面进行交互,我设置了一个能跨多个文件(整个文件夹)的全局变量保存文件globalvar.py。
还有为了防止图片路径更改后导致程序找不到,我们需要设置一个.qrc文件来保存所需图片,然后利用下面这行命令将这些图片都转为.py文件在程序中引用。它的本质就是将图片转化为base64格式进行保存,需要用的时候在引入读取。这样即使原图路径改变或将其打包为.exe文件在别的电脑上运行都不会丢失图片。(我这里引入的图片是文章开头程序运行截图里的样式1、样式2、样式3以及程序窗口左上角的图标还有生成的.exe文件图标)
pyrcc5 picture.qrc -o picture_re.py
如图这就是我的.qrc文件和转化的.py文件。
由于样式三的图片用的myqr库不支持二维码内容为英文,所以我设置了一个翻译功能,检测到输入的内容为中文时将其自动转化成英文。这里采取的是爬取有道翻译的方式进行转化。
from urllib import request
from urllib import parse
import json
def tran(data):
Request_URL="http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
form_data={}
form_data['i']=data
form_data['from'] = 'AUTO'
form_data['to'] = 'AUTO'
form_data['smartresult'] = 'dict'
form_data['doctype']='json'
form_data['version']='2.1'
form_data['action']='FY_BY_CLICKBUTTION'
form_data['typoResult']='false'
data=parse.urlencode(form_data).encode('utf-8')
response=request.urlopen(Request_URL,data)
html=response.read().decode('utf-8')
translate_results = json.loads(html)
# 找到翻译结果
translate_result = translate_results["translateResult"][0][0]['tgt']
# 打印翻译结果
# print(translate_result)
return translate_result
最后界面用的pyqt5的东西,主窗口用的MainWindow,提示窗口用的Widget(本来也想用Dialog,但是Widget自带close方法,多香…)。
由于代码有点多,就不再这里一一贴出来了,源码我放在了这里:
https://github.com/sleepyyoung/QRCode
最后在放一段演示视频吧:
自制二维码生成器演示