個性化二維碼的exe桌面應用的獲取方式我放在文章最后面了,注意查收,通過執行打包后的exe應用程式可以直接運行生成個性化二維碼,
開始之前先來看一下通過二維碼生成器是如何生成個性化二維碼的,
【閱讀全文】


其中使用的python包和之前的GUI應用制作使用的模塊是一樣的,
# -*- coding:utf-8 -*-
import os
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import images
這里的images模塊是用于解決打包應用時外部圖片的參考不能生效的問題,后面的一篇文章中將會說明如何將外部資源打包到exe的應用中去,
做GUI的桌面應用,首先還是使用pyqt5進行界面的布局和界面組件的添加,雖然代碼量看起來比較多,但邏輯不多,
# -*- coding:utf-8 -*-
def init_ui(self):
grid = QGridLayout()
self.picture_name = ''
self.words_label = QLabel()
self.words_label.setText('鏈接設定:')
self.words_text = QLineEdit()
self.words_text.setPlaceholderText('www.baidu.com')
self.words_text.setAttribute(Qt.WA_InputMethodEnabled, False)
self.version_label = QLabel()
self.version_label.setText('邊距設定(只允許微調):')
self.version_text = QSpinBox()
self.version_text.setRange(1, 3)
self.version_text.setValue(1)
self.picture_text = QLineEdit()
self.picture_text.setPlaceholderText('個性化圖片路徑')
self.picture_text.setReadOnly(True)
self.picture_button = QPushButton()
self.picture_button.setText('個性化圖片')
self.picture_button.clicked.connect(self.picture_button_click)
self.colorized_label = QLabel()
self.colorized_label.setText('是否顯示為彩色:')
self.colorized_text = QComboBox()
colorized_items = ['是', '否']
self.colorized_text.addItems(colorized_items)
self.colorized_text.setCurrentIndex(1)
self.brightness_label = QLabel()
self.brightness_label.setText('調節圖片亮度:')
self.brightness_text = QDoubleSpinBox()
self.brightness_text.setRange(1, 10)
self.brightness_text.setSingleStep(1.0)
self.save_dir_text = QLineEdit()
self.save_dir_text.setPlaceholderText('存盤目錄')
self.save_dir_text.setReadOnly(True)
self.save_dir_button = QPushButton()
self.save_dir_button.setText('自定義路徑')
self.save_dir_button.clicked.connect(self.save_dir_button_click)
self.generate_button = QPushButton()
self.generate_button.setText('快速生成二維碼')
self.generate_button.clicked.connect(self.generate_button_click)
self.version_current = QLabel()
self.version_current.setText('默認二維碼為作者公眾號,版本宣告:本應用由公眾號 [Python 集中營] 發布!')
self.version_current.setAlignment(Qt.AlignCenter)
self.version_current.setStyleSheet('color:red')
self.image = QLabel()
self.image.setScaledContents(True)
self.image.setMaximumSize(200, 200)
self.image.setPixmap(QPixmap(':/default.png'))
grid.addWidget(self.words_label, 0, 0, 1, 1)
grid.addWidget(self.words_text, 0, 1, 1, 2)
grid.addWidget(self.version_label, 1, 0, 1, 2)
grid.addWidget(self.version_text, 1, 2, 1, 1)
grid.addWidget(self.picture_text, 2, 0, 1, 2)
grid.addWidget(self.picture_button, 2, 2, 1, 1)
grid.addWidget(self.colorized_label, 3, 0, 1, 2)
grid.addWidget(self.colorized_text, 3, 2, 1, 1)
grid.addWidget(self.brightness_label, 4, 0, 1, 2)
grid.addWidget(self.brightness_text, 4, 2, 1, 1)
grid.addWidget(self.save_dir_text, 5, 0, 1, 2)
grid.addWidget(self.save_dir_button, 5, 2, 1, 1)
grid.addWidget(self.generate_button, 6, 0, 1, 3)
hbox = QHBoxLayout()
hbox.addWidget(self.image)
hbox.addSpacing(30)
hbox.addLayout(grid)
vbox = QVBoxLayout()
vbox.addLayout(hbox)
vbox.addSpacing(10)
vbox.addWidget(self.version_current)
self.setLayout(vbox)
用到的槽函式有三個,一個是為了做選擇背景圖片、第二個是為了做選擇要存盤生成后的檔案存放路徑可以自由選擇存放到什么地方、第三個是為了做調起生成二維碼的函式,
第一個來看一下如何通過關聯槽函式來實作讀取需要作為個性化二維碼的背景圖片,
def picture_button_click(self):
import os
self.cwd = os.getcwd()
txt_file_path = QFileDialog.getOpenFileName(self, "選取檔案", self.cwd, "JPG File (*.jpg);; PNG File (*.png)")
self.picture_text.setText(txt_file_path[0])
if self.picture_text.text().strip() != "":
self.picture_name = txt_file_path[0].split('/')[-1].split('.')[0]
print(self.picture_name)
else:
self.picture_name = ''
第二個就是選擇存盤檔案路徑的槽函式,
def save_dir_button_click(self):
import os
self.cwd = os.getcwd()
directory = QFileDialog.getExistingDirectory(self, '選取檔案夾', self.cwd)
print(directory)
self.save_dir_text.setText(directory)
是通過dialog對話框的形式獲取到自定義選擇的存盤檔案路徑,
第三個槽函式就是為了生成個性化二維碼,其實二維碼的生成部分只有一句代碼,那就是MYQR模塊提供的run函式,通過這個函式就能實作個性化二維碼的生成,
首先,需要匯入MYQR這個庫,
from MyQR import myqr
為了可以看清楚后面二維碼生成函式(run函式),先來看一下這個庫提供的run函式都有什么引數,
'''
myqr.run() 引數解釋
words 需要跳轉的鏈接或者文字
version 自然數,數字越大邊長越大
level 糾錯等級
picture 結合圖片
colorized 是否顯示彩色
contrast 對比度,默認為1.0
brightness 亮度 float,調節圖片的亮度
save_name 輸出檔案名,默認檔案名"qrcode.png"
save_dir 存盤位置,默認存盤當前目錄
'''
下面看一下這個具體生成個性化二維碼的槽函式,除了二維碼的生成部分和需要將生成后的二維碼放到應用的頁面上展示之外,其他主要就是一些引數的校驗方法,
def generate_button_click(self):
from MyQR import myqr
colorized_index = self.colorized_text.currentIndex()
print(colorized_index)
colorized = None
if colorized_index == 0:
colorized = True
else:
colorized = False
print(colorized)
words_text = self.words_text.text()
words = None
if words_text.strip() != "":
words = words_text.strip()
else:
words = 'default message: Python is very beautiful'
print(words)
version_text = self.version_text.value()
print(version_text)
picture_text = self.picture_text.text()
picture = None
if picture_text.strip() != "":
picture = picture_text
print(picture)
brightness_text = self.brightness_text.value()
print(brightness_text)
save_dir_text = self.save_dir_text.text()
save_dir = None
if save_dir_text.strip() != "":
save_dir = save_dir_text.strip()
else:
save_dir = os.getcwd()
print(save_dir)
myqr.run(words=str(words), version=int(version_text), level='H', picture=picture,
colorized=colorized, contrast=1.0, brightness=float(brightness_text), save_dir=save_dir)
if self.picture_name.strip() != '':
map_dir = save_dir + '/' + self.picture_name + '_qrcode.png'
else:
map_dir = save_dir + '/' + 'qrcode.png'
print(map_dir)
self.image.setPixmap(QPixmap(map_dir))
代碼看起來比較多,仔細理一理也沒有很難懂的邏輯處理,有問題或者有更好的處理方法可以在評論區留言大家一起討論~
個性化二維碼生成器的exe桌面應用獲取方式:公眾號內回復“二維碼生成器”領取,由于代碼篇幅較多,下一篇文章將介紹一下怎么可以將外部資源圖片等打包進PyQt5的應用中,

【往期精選】
如何在控制臺實作一個資料管理系統(包括MYSQL資料庫的增刪改查)
自制檔案格式轉換器,支持 .txt/.xlsx/.csv格式轉換...
PyPDF2如何實作按照PDF頁碼提取后并另存為PDF格式檔案?
浪漫的turtle,送給程式員自己的圣誕樹!
PyQt5 GUI:百度圖片下載器(文末附原始碼)
歡迎關注作者公眾號【Python 集中營】,專注于后端編程,每天更新技術干貨,不定時分享各類資料!轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/396044.html
標籤:Python
上一篇:requests過時了?快看Python新一代爬蟲請求庫
下一篇:1.13 通過關鍵字排序字典串列
