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日

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加