python调用dll、so动态库读取rfid卡号 | python 技术论坛-380玩彩网官网入口

```python

#

#

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  'd' % (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 = '0d' % cardno
        self.listwidget.additem('读卡成功!16进制卡号:xxxxx' % (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 = '0d' % cardno
        self.listwidget.additem('读卡成功!16进制卡号:xxxxx' % (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_())
本作品采用《cc 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
网站地图