Python PtQt5界面与逻辑分离设计读写IC卡修改M1卡密钥操作

使用PyQt5开发桌面应用时,修改UI界面会导致之前的逻辑代码丢失。本文介绍了将界面与逻辑代码分离的方法,包括使用Qt Designer新建窗体文件、用PyUIC生成Python代码、新建逻辑代码文件并绑定槽函数等,实现界面改动时逻辑代码不受影响。

       使用PyQt5设计UI界面开发桌面应用程序的小伙伴,刚开始可能都会遇到这样让人不爽的事:用Qt Designer好不容易设计好的界面并写好逻辑代码,已经可以正常运行了,某天发现界面要做个小改动(这种事好象永远都避不了),重新修改好UI界面窗口,用PyUIC将界面窗口再次生成Python代码,这时你会悲伤的发现:以前千辛万苦写好的逻辑代码全部没有了,需要在新生成的界面代码内重新加入逻辑代码!这实在是一件让人奔溃的事。

      只有将界面与逻辑代码分离,才能终结这种不辛的事再次发生!

本示例使用的发卡设备:https://item.taobao.com/item.htm?id=615391857885&spm=a1z10.5-c.w4002-21818769070.11.6cc85700Robi3x

 一、使用Qt Designer新建窗体文件MifareCardRW.ui,将需要的控件拖入窗体并布局好,

 二、Python项目内,右击已布局好的窗体文件MifareCardRW.ui,选击菜单External Tool\PyUIC,将窗体文件自动生成Python代码文件MifareCardRW.py。

三、新建逻辑代码文件call_MifareCardRW.py,加入代码from mainwindow import Ui_MainWindow引入窗体类,并且为需要的控件绑定槽函数: 

 四、运行逻辑代码call_MifareCardRW.py,你会发现以前设计好的窗体打开,且各控件事件运行正常,以后再改动窗体文件MifareCardRW.ui,只要不更改以前控件名称,重新生成MifareCardRW.py窗体代码,逻辑代码不用更改还正常运行,这样逻辑与界面代码就分开啦。 

五、逻辑代码 call_MifareCardRW.py 源码

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget,QMessageBox
from MifareCardRW import Ui_Frame
import sys

import struct  # struct的pack函数把任意数据类型变成字符串
import ctypes  # 调用DLL动态库要有这个引用

# 控制字定义
BLOCK0_EN = eval('0x01')  # 读写块0
BLOCK1_EN = eval('0x02')  # 读写块1
BLOCK2_EN = eval('0x04')  # 读写块2
NEEDSERIAL = eval('0x08')  # 读写指定序列号的卡
EXTERNKEY = eval('0x10')  # 需要每次指定密码
NEEDHALT = eval('0x20')  # 写卡后是否休眠卡

readblockdata=bytes(16)  #保存读取的块数据,用做写UID后面的厂家信息

class MainWindow(QtWidgets.QMainWindow, Ui_Frame):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.pushButton_beep.clicked.connect(self.pushButton_beep_Clicked)
        self.pushButton_clearlist.clicked.connect(self.pushButton_clearlist_click)
        self.pushButton_getdevicenum.clicked.connect(self.pushButton_getdevicenum_click)
        self.pushButton_piccreadex.clicked.connect(self.pushButton_piccreadex_click)
        self.pushButton_piccwriteex.clicked.connect(self.pushButton_piccwriteex_click)
        self.pushButton_piccchangesinglekey.clicked.connect(self.pushButton_piccchangesinglekey_click)
        self.pushButton_piccread.clicked.connect(self.pushButton_piccread_click)
        self.pushButton_piccwrite.clicked.connect(self.pushButton_piccwrite_click)
        self.pushButton_piccwriteserial.clicked.connect(self.pushButton_piccwriteserial_click)
        self.textEdit_thisblock.textChanged.connect(self.textEdit_thisblock_change_handler)
        self.textEdit_block0.textChanged.connect(self.textEdit_block0_change_handler)
        self.textEdit_block1.textChanged.connect(self.textEdit_block1_change_handler)
        self.textEdit_block2.textChanged.connect(self.textEdit_block2_change_handler)
        self.textEdit_newkey.textChanged.connect(self.textEdit_newkey_change_handler)

    def LoadLibrary(self):
        import sys
        if sys.platform == 'win32':
            # windows系统加载当前目录下的DLL库
            dllfile = sys.path[0] + '\OUR_MIFARE.dll'
            Objdll = ctypes.windll.LoadLibrary(dllfile)
        elif sys.platform == 'linux':
            # Linux加载当前目录下的so库
            dllfile = sys.path[0] + '/libOURMIFARE.so'
            Objdll = ctypes.cdll.LoadLibrary(dllfile)
        else:
            # macOS‌加载当前目录下的.dylib库
            dllfile = sys.path[0] + '/libOURMIFARE.dylib'
            Objdll = ctypes.cdll.LoadLibrary(dllfile)
        return  Objdll

    def textEdit_thisblock_chan
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

广州荣士电子_18002295132

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

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

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

打赏作者

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

抵扣说明:

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

余额充值