python作工控上位机————自修记录(第六天)调用PYQT5做界面,生成二维码,第三版

在经历了前两版二维码生成器后,个人觉得,先把信息写入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表格名字为安全上料仓位表格,在文件内添加需要内容即可。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白作工控

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值