嗨,我正在为RFID阅读器构建GUI。我以前用过tkinter,但我有表演方面的问题。总之有两个屏幕:主屏幕和访问屏幕。主屏幕在屏幕上,只有读卡器上有卡时,访问屏幕才打开。读卡时会出现图片和标签。你知道吗
1)据我所知,我应该使用信号槽机制,因为我必须将数据从RFID线程传递到GUI线程。对吗?你知道吗
2)我可以不用按钮使用信号槽吗?我在网上找到的所有例子都是用按钮来显示信号槽机制。所以我很困惑。你知道吗
当读卡器读卡时,如何显示第二个小部件或带有卡所有者姓名的窗口。你知道吗
代码如下:
import sys
import datetime
import time
from time import strftime
from babel.dates import format_date, format_datetime, format_time
from PyQt5.QtWidgets import QApplication, QWidget, QFrame, QLabel, QHBoxLayout, QVBoxLayout, QMainWindow
from PyQt5.QtGui import QIcon, QPixmap, QFont
from PyQt5 import QtCore, Qt
from PyQt5.QtCore import pyqtSignal
class App(QWidget):
def __init__(self):
super().__init__()
self.left = 0
self.top = 0
self._width = 480
self._height = 800
self.Idle()
#self.Access()
def Idle(self):
self.setGeometry(self.left, self.top, self._width, self._height)
self.background =QLabel(self)
pixmap = QPixmap('main_page')
self.background.setPixmap(pixmap)
self.background.resize(pixmap.width(), pixmap.height())
layout = QVBoxLayout()
self.setLayout(layout)
layout.setSpacing(0)
layout.addSpacing(20)
#Logo
logo = QLabel(self)
logo.setPixmap(QPixmap('logo'))
layout.addWidget(logo, alignment=QtCore.Qt.AlignHCenter)
layout.addSpacing(50)
#Date
today = format_date(datetime.datetime.now(),"dd MMMM", locale = 'en').upper()
day = format_date(datetime.datetime.now(), "EEEE", locale = 'en').upper()
date = QLabel(self)
date.setText(day + " " + today)
date.setFont(QFont("Lato", 24))
date.setStyleSheet('color:white')
date.setFixedHeight(100)
layout.addWidget(date, alignment=QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
#Clock
clock = QLabel(self)
clock.setText(strftime('%H:%M'))
clock.setFont(QFont("Lato", 90))
clock.setStyleSheet('color:white')
layout.addWidget(clock, alignment=QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
layout.addStretch(1000)
self.show()
class Access(QWidget)
def Access(self):
Name = QLabel(self)
Name.setText("Can enter")
#There should be UID Information which will come from Reader.
Name.setFont(QFont("Lato", 90))
Name.setStyleSheet('color:white')
Name.move(240,400)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
app.exec_()
time.sleep(5)
和读者类:
from datetime import datetime,timedelta
import sys
from pirc522 import RFID
class Reader():
def __init__(self):
try:
self.reader = RFID()
self.prev_time = ""
self.prev_uid = ""
except Exception as e:
pass
#ErrorLogger("1", "Error in reader".format(e)).log()
def read(self):
cardUID = ""
self.reader.wait_for_tag()
(error,data) = self.reader.request()
(error, uid) = self.reader.anticoll()
if not error:
for number in uid[:4]:
cardUID += format(number,"02X")
if ( (cardUID != self.prev_uid) or ((cardUID == self.prev_uid) and (datetime.now()-self.prev_time>timedelta(seconds=3)))):
self.prev_time = datetime.now()
self.prev_uid = cardUID
return cardUID
目前没有回答
相关问题 更多 >
编程相关推荐