Tkinter GUI RFID阅读器

时间:2018-04-07 04:50:03

标签: python tkinter rfid

我正在为我的rfid阅读器制作一个gui,但是当我运行该程序时,它只在shell窗口上运行,并且不会打开tkinter gui窗口。我是python的新手,它是gui所以任何人都可以帮助我。即使是解决我的问题的教程也可以提供帮助。这是我的代码。谢谢你的帮助。

from tkinter import *
import binascii
import socket
import time
import signal
import sys

import Adafruit_PN532 as PN532

root = Tk(className="Team Baboy") 
root.geometry("800x480")
welcome = Label(root,text="Welcome to Hog Traceability System")
welcome.pack()
welcome.config(font=("Gothic", 18))
back = Frame(width=800, height=480)
back.pack()


instruction = Label(master=back, text='Tap your Authorization Card')
instruction.pack()
instruction.config(font=("Gothic", 30))
instruction.grid(row=0, column=1, padx=0, pady=150)

CS   = 18
MOSI = 23
MISO = 24
SCLK = 25

CARD_KEY = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]

Delay = 1

HEADER = b'BG'

def close(signal, frame):
         sys.exit(0)

signal.signal(signal.SIGINT, close)

pn532 = PN532.PN532(cs=CS, sclk=SCLK, mosi=MOSI, miso=MISO)
pn532.begin()
pn532.SAM_configuration()

print('PN532 NFC RFID 13.56MHz Card Reader')

while True:
    uid = pn532.read_passive_target()
    if uid is None:
        continue
    print('')
    print('Card UID 0x{0}'.format(binascii.hexlify(uid)))
    if not pn532.mifare_classic_authenticate_block(uid, 4, PN532.MIFARE_CMD_AUTH_B, CARD_KEY):
        print('Failed to authenticate with card!')
        continue
    data = pn532.mifare_classic_read_block(4)
    if data is None:
        print('Failed to read data from card!')
        continue
    if data[0:2] !=  HEADER:
        print('Card is not written with proper block data!')
        continue
    print('User Id: {0}'.format(int(data[2:8].decode("utf-8"), 16)))




root.mainloop() 

1 个答案:

答案 0 :(得分:0)

这可能是一个问题,而不是与RFID有关的问题。我首先要在添加RFID功能之前使GUI工作。

在这里,我已经注释掉了所有的RFID代码,只留下了tkinter代码。然后我根据documentation初始化了Tk() 而没有参数。

from Tkinter import *
import binascii
import socket
import time
import signal
import sys

# import Adafruit_PN532 as PN532

root = Tk()
root.className = "TeamBadoy"
# root = Tk(className="Team Baboy")
root.geometry("800x480")
welcome = Label(root,text="Welcome to Hog Traceability System")
welcome.pack()
welcome.config(font=("Gothic", 18))
back = Frame(width=800, height=480)
back.pack()


instruction = Label(master=back, text='Tap your Authorization Card')
instruction.pack()
instruction.config(font=("Gothic", 30))
instruction.grid(row=0, column=1, padx=0, pady=150)

CS   = 18
MOSI = 23
MISO = 24
SCLK = 25

# CARD_KEY = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]

Delay = 1

HEADER = b'BG'

# def close(signal, frame):
#          sys.exit(0)
#
# signal.signal(signal.SIGINT, close)
#
# pn532 = PN532.PN532(cs=CS, sclk=SCLK, mosi=MOSI, miso=MISO)
# pn532.begin()
# pn532.SAM_configuration()

print('PN532 NFC RFID 13.56MHz Card Reader')

# while True:
    # uid = pn532.read_passive_target()
    # if uid is None:
    #     continue
    # print('')
    # print('Card UID 0x{0}'.format(binascii.hexlify(uid)))
    # if not pn532.mifare_classic_authenticate_block(uid, 4, PN532.MIFARE_CMD_AUTH_B, CARD_KEY):
    #     print('Failed to authenticate with card!')
    #     continue
    # data = pn532.mifare_classic_read_block(4)
    # if data is None:
    #     print('Failed to read data from card!')
    #     continue
    # if data[0:2] !=  HEADER:
    #     print('Card is not written with proper block data!')
    #     continue
    # print('User Id: {0}'.format(int(data[2:8].decode("utf-8"), 16)))




root.mainloop()
# while True:
#     tk.update_idletasks()
#     tk.update()
#     sleep(0.01)

这导致显示GUI窗口;它实际上并没有任何东西,但确实显示出来了!

Screenshot of GUI window produced by above code

Tkinter understanding mainloop上建议,您可能需要考虑明确说明,而不是使用mainloop();

while True:
    root.update_idletasks()
    root.update()
    sleep(0.01)