最近用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,读卡器程序始终循环
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。