把上一个图形化界面生成二维码的程序改进了一下,可以直接在对话框里选择文件,而不是自己输入文件名,操作方便了很多。
附上代码:
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_())
知识点什么的完整的记录见博客:
https://blog.csdn.net/pp5354chun/article/details/88539905
- THE END - ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:秦小炅,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ----------------------------------------------------------------------------------------------------------------------
|