读卡器介绍:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.20.64315b437VyT8H&id=562957272162icon-default.png?t=O83Ahttps://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.20.64315b437VyT8H&id=562957272162

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'IDReader.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget
import struct  # struct的pack函数把任意数据类型变成字符串
import ctypes  # 调用DLL动态库要有这个引用

class Ui_Frame(object):
    def setupUi(self, Frame):
        Frame.setObjectName("Frame")
        Frame.resize(531, 421)
        font = QtGui.QFont()
        font.setPointSize(10)
        Frame.setFont(font)
        self.pushButton_beep = QtWidgets.QPushButton(Frame)
        self.pushButton_beep.setGeometry(QtCore.QRect(10, 10, 511, 30))
        self.pushButton_beep.setObjectName("pushButton_beep")
        self.pushButton_getdevicenum = QtWidgets.QPushButton(Frame)
        self.pushButton_getdevicenum.setGeometry(QtCore.QRect(10, 42, 511, 30))
        self.pushButton_getdevicenum.setObjectName("pushButton_getdevicenum")
        self.pushButton_piccreadex = QtWidgets.QPushButton(Frame)
        self.pushButton_piccreadex.setGeometry(QtCore.QRect(10, 75, 511, 30))
        self.pushButton_piccreadex.setObjectName("pushButton_piccreadex")
        self.pushButton_piccreadone = QtWidgets.QPushButton(Frame)
        self.pushButton_piccreadone.setGeometry(QtCore.QRect(10, 108, 511, 30))
        self.pushButton_piccreadone.setObjectName("pushButton_piccreadone")
        self.listWidget = QtWidgets.QListWidget(Frame)
        self.listWidget.setGeometry(QtCore.QRect(10, 184, 511, 231))
        self.listWidget.setObjectName("listWidget")
        self.pushButton_clearlist = QtWidgets.QPushButton(Frame)
        self.pushButton_clearlist.setGeometry(QtCore.QRect(350, 148, 170, 30))
        self.pushButton_clearlist.setObjectName("pushButton_clearlist")
        self.label = QtWidgets.QLabel(Frame)
        self.label.setGeometry(QtCore.QRect(12, 153, 70, 30))
        self.label.setObjectName("label")

        self.retranslateUi(Frame)
        self.pushButton_clearlist.clicked.connect(self.pushButton_clearlist_click)
        self.pushButton_beep.clicked.connect(self.pushButton_beep_click)
        self.pushButton_getdevicenum.clicked.connect(self.pushButton_getdevicenum_click)
        self.pushButton_piccreadex.clicked.connect(self.pushButton_piccreadex_click)
        self.pushButton_piccreadone.clicked.connect(self.pushButton_piccreadone_click)
        QtCore.QMetaObject.connectSlotsByName(Frame)

    def retranslateUi(self, Frame):
        _translate = QtCore.QCoreApplication.translate
        Frame.setWindowTitle(_translate("Frame", "IDReader"))
        self.pushButton_beep.setText(_translate("Frame", "驱动读卡器发声"))
        self.pushButton_getdevicenum.setText(_translate("Frame", "获取读卡器出厂序号"))
        self.pushButton_piccreadex.setText(_translate("Frame", "读取ID、HID卡号"))
        self.pushButton_piccreadone.setText(_translate("Frame", "仅读取一次卡号,再次读取需将卡拿开再重新刷卡"))
        self.pushButton_clearlist.setText(_translate("Frame", "清空下栏提示信息"))
        self.label.setText(_translate("Frame", "提示信息栏"))

    def ListBottom(self):
        self.listWidget.scrollToBottom()
        seleid = self.listWidget.count() - 1
        self.listWidget.item(seleid).setSelected(True)

    def pushButton_clearlist_click(self):
        self.listWidget.clear()

    def ListErrInf(self, Errcode):
        if (Errcode == 8):
            self.listWidget.addItem('错误代码:8,未寻到卡,请重新拿开卡后再放到感应区!')
        elif (Errcode == 21):
            self.listWidget.addItem('错误代码:21,没有动态库!')
        elif (Errcode == 22):
            self.listWidget.addItem('错误代码:22,动态库或驱动程序异常!')
        elif (Errcode == 23):
            self.listWidget.addItem('错误代码:23,有可能是以下原因:')
            self.listWidget.addItem('1、表示未检测到免驱动读卡器!')
            self.listWidget.addItem('2、有驱动读卡器表示驱动程序错误或未检测到有驱读卡器!')
            self.listWidget.addItem('3、Linux系统请以sudo超级用户模式运行')
        elif (Errcode == 24):
            self.listWidget.addItem('错误代码:24,操作超时,一般是动态库没有反映!')
        elif (Errcode == 25):
            self.listWidget.addItem('错误代码:25,发送字数不够!')
        elif (Errcode == 26):
            self.listWidget.addItem('错误代码:26,发送的CRC错!')
        elif (Errcode == 27):
            self.listWidget.addItem('错误代码:27,接收的字数不够!')
        elif (Errcode == 28):
            self.listWidget.addItem('错误代码:28,接收的CRC错!')
        else:
            self.listWidget.addItem('未知错误,错误代码:' + str(Errcode))
        self.ListBottom()

    def pushButton_beep_click(self):
        status = Objdll.idr_beep(50) % 256
        if status == 0:
            self.listWidget.addItem("读卡器已执行响声指令!")
            self.ListBottom()
        else:
            self.ListErrInf(status)

    def pushButton_getdevicenum_click(self):
        devno = bytes(4)  # 声明4个字节缓冲
        status = Objdll.pcdgetdevicenumber(devno) % 256
        if (status == 0):
            Objdll.idr_beep(38)

            SerialNum = ''
            for num in range(0, len(devno)):
                SerialNum = SerialNum + '%03d' % (devno[num])
                if (num < len(devno) - 1):
                    SerialNum = SerialNum + '-'
            self.listWidget.addItem('读取设备编号成功!编号:' + SerialNum)
            self.ListBottom()
        else:
            self.ListErrInf(status)

    def pushButton_piccreadex_click(self):
        idserial = bytes(5)
        status = Objdll.idr_read(idserial) % 256
        if (status == 0):
            Objdll.idr_beep(38)
            Cardno = idserial[4]
            Cardno = Cardno + (idserial[3] * 256)
            Cardno = Cardno + (idserial[2] * 65536)
            Cardno = Cardno + (idserial[1] * 16777216)
            CardnoStr = '%010d' % Cardno
            self.listWidget.addItem('读卡成功!16进制卡号:%02X%02X%02X%02X%02X' % (idserial[0], idserial[1], idserial[2], idserial[3], idserial[4]) +",转换成10进制卡号:"+CardnoStr)
        else:
            self.ListErrInf(status)

    def pushButton_piccreadone_click(self):
        idserial = bytes(5)
        status = Objdll.idr_read_once(idserial) % 256
        if (status == 0):
            Objdll.idr_beep(38)
            Cardno = idserial[4]
            Cardno = Cardno + (idserial[3] * 256)
            Cardno = Cardno + (idserial[2] * 65536)
            Cardno = Cardno + (idserial[1] * 16777216)
            CardnoStr = '%010d' % Cardno
            self.listWidget.addItem('读卡成功!16进制卡号:%02X%02X%02X%02X%02X' % (idserial[0], idserial[1], idserial[2], idserial[3], idserial[4]) +",转换成10进制卡号:"+CardnoStr)
        else:
            self.ListErrInf(status)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Frame = QtWidgets.QFrame()
    ui = Ui_Frame()
    ui.setupUi(Frame)

    screen = QDesktopWidget().screenGeometry()
    size = Frame.geometry()
    # 获得窗口相关坐标
    newLeft = (screen.width() - size.width()) // 2
    newTop = (screen.height() - size.height()) // 2
    # 移动窗口使其居中
    Frame.move(newLeft, newTop)
    Frame.show()

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

    sys.exit(app.exec_())

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐