makabaka737 2022-02-04 10:38 采纳率: 100%
浏览 21
已结题

树莓派+pyqt5 + NFC试做考勤系统同步处理问题

问题遇到的现象和发生背景

最近用PyQT5和IC卡读卡器做一个考勤系统,结果要先扫IC卡后才会打开GUI界面

问题相关代码,请勿粘贴截图
import binascii
import sys
import time
import nfc
from PyQt5 import QtCore
from PyQt5 import QtWidgets
from PyQt5.QtCore import QFileInfo, QDateTime, QTimer
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow
from timecard_GUI import Ui_timecard


class timecard2GUI(QMainWindow, Ui_timecard):
    def __init__(self):
        super(timecard2GUI, self).__init__()
        self.setupUi(self)
        self.timer = QTimer()
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.showFullScreen()
        self.timer.timeout.connect(show_time)
        self.timer.start(1000)

def show_time():
    time_now = QDateTime.currentDateTime()  # 获取当前时间
    timedisplay = time_now.toString("hh:mm:ss dddd")  # 格式化一下时间
    # print(timedisplay)
    time_form.lbl_showtime.setText(timedisplay)

def show_name(name):
    time_form.lbl_showname.setText(name)


class MyCardReader(QMainWindow, Ui_timecard):
    def on_connect(self, tag):
        # 接触时
        print("确认")
        # 标签表示
        print(tag)
        # 读取ID名
        self.idm = str(binascii.hexlify(tag._nfcid))
        get_id = "IDm : " + self.idm
        print(get_id)
        time.sleep(1)
        show_name(get_id)
    def read_id(self):
        clf = nfc.ContactlessFrontend('usb')
        try:
            clf.connect(rdwr={'on-connect': self.on_connect})
        finally:
            clf.close()

if __name__ == "__main__":
    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
    app = QtWidgets.QApplication(sys.argv)
    time_form = timecard2GUI()
    time_form.setWindowTitle('timecard')
    time_form.lbl_showname.setText('请放卡')
    root = QFileInfo(__file__).absolutePath()
    app.setStyle('Fusion')
    time_form.show()
    cr = MyCardReader()

    # 最初表示
    print("请放卡")

    # 待机
    cr.read_id()

    # 扫卡后
    print("确认")

    sys.exit(app.exec_())

运行结果及报错内容

要扫卡后才能显示GUI界面,扫卡只能进行1次

我的解答思路和尝试过的方法

完全没有编程经验,搜了一下好像有异步处理和多线程两种方法,具体代码怎么弄没有头绪

我想要达到的结果

GUI的lbl_showtime用来实时显示时间,lbl_showname在待机时显示“请放卡”,在扫描到IC卡后输出IC卡的ID,读卡器程序始终循环

  • 写回答

2条回答 默认 最新

  • 有问必答小助手 2022-02-07 10:40
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月16日
  • 已采纳回答 2月8日
  • 创建了问题 2月4日

悬赏问题

  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)