在经历了前两版二维码生成器后,个人觉得,先把信息写入EXSL表格,然后在生成二维码时只要选仓,有利于现场调试。表格如下
代码如下:
# -*- coding: utf-8 -*-
import sys
import datetime
import pandas as pd
import qrcode
from PyQt5.QtGui import QFont, QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QComboBox, QPushButton, QTextEdit, QFileDialog
class MyWindow(QWidget):
def __init__(self):
super().__init__()
# 读取数据表格
try:
self.df = pd.read_excel('D:\\二维码生成\\安全上料仓位表格.xlsx', sheet_name='Sheet1')
self.warehouse_list = self.df['仓位名称'].tolist()
except:
self.warehouse_list = []
# 界面元素
self.label1 = QLabel(self)
self.label1.setText("站号ID:")
self.label1.move(20, 20)
self.label1.setFont(QFont("Roman times", 12))
self.lineedit1 = QLineEdit(self)
self.lineedit1.setGeometry(150, 20, 100, 20)
self.label2 = QLabel(self)
self.label2.setText("生产线号:")
self.label2.move(20, 60)
self.label2.setFont(QFont("Roman times", 12))
self.lineedit2 = QLineEdit(self)
self.lineedit2.setGeometry(150, 60, 100, 20)
self.label3 = QLabel(self)
self.label3.setText("仓号:")
self.label3.move(20, 100)
self.label3.setFont(QFont("Roman times", 12))
self.combobox = QComboBox(self)
self.combobox.setGeometry(150, 100, 80, 20)
self.combobox.addItems(self.warehouse_list)
self.combobox.currentIndexChanged.connect(self.updateWarehouse)
self.lineedit3 = QLineEdit(self)
self.lineedit3.setGeometry(230, 100, 20, 20)
self.label4 = QLabel(self)
self.label4.setText("日:")
self.label4.move(20, 140)
self.label4.setFont(QFont("Roman times", 12))
self.lineedit4 = QLineEdit(self)
self.lineedit4.setGeometry(150, 140, 100, 20)
self.label5 = QLabel(self)
self.label5.setText("时:")
self.label5.move(20, 180)
self.label5.setFont(QFont("Roman times", 12))
self.lineedit5 = QLineEdit(self)
self.lineedit5.setGeometry(150, 180, 100, 20)
self.label6 = QLabel(self)
self.label6.setText("分:")
self.label6.move(20, 220)
self.label6.setFont(QFont("Roman times", 12))
self.lineedit6 = QLineEdit(self)
self.lineedit6.setGeometry(150, 220, 100, 20)
self.edit = QTextEdit(self)
self.edit.setGeometry(20, 260, 350, 100)
self.button1 = QPushButton(self)
self.button1.setGeometry(20, 380, 100, 30)
self.button1.setText("校验")
self.button1.clicked.connect(self.check)
self.button2 = QPushButton(self)
self.button2.setGeometry(130, 380, 100, 30)
self.button2.setText("生成")
self.button2.clicked.connect(self.generate)
self.setWindowTitle("二维码生成器")
self.setGeometry(100, 100, 400, 430)
self.setWindowIcon(QIcon("icon.png"))
def updateWarehouse(self):
# 更新仓号输入框的值
selected_warehouse = self.combobox.currentText()
if selected_warehouse != '':
warehouse_row = self.df[self.df['仓位名称'] == selected_warehouse]
# print(warehouse_row)
warehouse_number = warehouse_row.iloc[0]['仓号']
warehouse_number1 = warehouse_row.iloc[0]['站号ID']
warehouse_number2 = warehouse_row.iloc[0]['线号ID']
global warehouse_number3
warehouse_number3 = warehouse_row.iloc[0]['ID2']
now = datetime.datetime.now()
day1 = now.day # 获取当前日期中的日
hour1 = now.hour # 获取当前时间中的小时
minute1 = now.minute # 获取当前时间中的分钟
self.lineedit3.setText(str(warehouse_number))
self.lineedit1.setText(str(warehouse_number1))
self.lineedit2.setText(str(warehouse_number2))
self.lineedit4.setText(str(day1))
self.lineedit5.setText(str(hour1))
self.lineedit6.setText(str(minute1))
return
def check(self):
# 校验输入框的值并将结果写入输出框
try:
site_id = int(self.lineedit1.text())
prod_line = int(self.lineedit2.text())
warehouse = int(self.lineedit3.text())
day = int(self.lineedit4.text())
hour = int(self.lineedit5.text())
minute = int(self.lineedit6.text())
except:
self.edit.setText("输入框中应输入数字!")
return
# 将10进制转为16进制,并计算字节异或和
hex_str = '{:04X}{:02X}{:02X}{:02X}{:02X}{:02X}'.format(site_id, prod_line, warehouse, day, hour, minute)
hex_list = [int(hex_str[i:i+2], 16) for i in range(0, len(hex_str), 2)]
chksum = hex_list[0]
for i in range(1, len(hex_list)):
chksum ^= hex_list[i]
out_str = hex_str + '{:02X}'.format(chksum)
self.edit.setText(out_str)
def generate(self):
# 生成二维码
text = self.edit.toPlainText().strip()
if text == '':
self.edit.setText("请先进行校验")
return
file_path, _ = QFileDialog.getSaveFileName(self, "保存二维码", warehouse_number3, "Images (*.png)")
if file_path == '':
return
qr = qrcode.QRCode(
version=2.1,
box_size=10,
border=4,
)
qr.add_data(text)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save(file_path)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
封装后,在运行程序时只要选仓,然后点校验,然后点生成,弹出提示框,确定后保存二维码
最后说一句。在D盘根目录下建一文件夹,名字为二维码生成,在文件夹内加一EXCL表格名字为安全上料仓位表格,在文件内添加需要内容即可。