您的位置:首页 > 编程语言 > Python开发

使用Python的PyQt5+qrcode模块生成自己的个性化二维码(二)

2019-03-13 19:54 190 查看

把之前的生成二维码的程序改进了一下,不用苦逼的自己输入文件名称了
上一版本的链接

改动的内容

其实就是引入了QFileDialog类,可以操作文件对话框,进行文件的打开和保存,用到的两个方法:

QFileDialog.getOpenFileName(self, str1, str2, str3)

执行之后会弹出一个打开文件的对话框,其中str1是对话框的标题,str2是默认的打开路径,str3是文件类型限制,返回一个二元元组,第一个元素是str类型的文件名字符串,第二个元素是bool值。

QFileDialog.getSaveFileName(self, str1, str2, str3)

执行之后打开一个“保存文件”的对话框,各个参数的和返回的值与open方法相同。

代码

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from qrcode import QRCode, ERROR_CORRECT_H
from PIL import Image

class Qr_qt(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle("二维码生成")
self.setWindowIcon(QIcon('10.jpg'))

self.lab1 = QLabel('请输入二维码的内容')

self.text1 = QLineEdit('内容', self)
self.text1.selectAll()

self.bt1 = QPushButton('选择图片', self)
self.bt1.setToolTip("<b>点击按钮选择要插入的图片</b>")
self.bt1.clicked.connect(self.chooseImage)

self.bt2 = QPushButton('生成', self)
self.bt2.setToolTip("<b>点击按钮生成二维码</b>")
self.bt2.clicked.connect(self.createQr)

grid = QGridLayout()
grid.addWidget(self.lab1, 0, 0)
grid.addWidget(self.text1, 0, 1)
grid.addWidget(self.bt1, 1, 0)
grid.addWidget(self.bt2, 1, 1)
self.setLayout(grid)

self.show()

def chooseImage(self):
self.fname, jud = QFileDialog.getOpenFileName(self, '打开文件', './', "Image Files (*.jpg *.png)")

def createQr(self):
qr = QRCode(version = 1, error_correction = ERROR_CORRECT_H, border = 2)

qr.add_data(self.text1.text())
qr.make(fit = True)

img = qr.make_image()
img = img.convert("RGB")

try:
logo = Image.open(self.fname)

w, h = img.size
logo_w = int(w/4)
logo_h = int(h/4)

rel_w = int((w-logo_w)/2)
rel_h = int((h-logo_h)/2)
logo = logo.resize((logo_w, logo_h), Image.ANTIALIAS)
logo = logo.convert("RGBA")
img.paste(logo, (rel_w, rel_h), logo)
finame, jud = QFileDialog.getSaveFileName(self, '保存文件', './', "Image Files (*.jpg *.png)")
if jud and img:
img.save(finame)

except:
QMessageBox.about(self, 'Error', 'No Such a File')

if __name__ == '__main__':
app = QApplication(sys.argv)
qr = Qr_qt()
sys.exit(app.exec_())

这样操作就方便多了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: