我正在为我的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()
答案 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窗口;它实际上并没有做任何东西,但确实显示出来了!
在Tkinter understanding mainloop上建议,您可能需要考虑明确说明,而不是使用mainloop()
;
while True:
root.update_idletasks()
root.update()
sleep(0.01)