В настоящее время я программирую скрипт на python, который должен показывать информацию с GTK Interface. Экран, который отображается, должен измениться, если на считывателе PN532 есть другой тег NFC.
В настоящее время моя программа выполняет только init ..., поэтому он показывает экран и печатает один раз. "окно изменилось", а затем программа зависает.
Пожалуйста, помогите мне.
from datetime import datetime
import time
import binascii
import socket
import signal
import sys
import Adafruit_PN532 as PN532
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject
# Pins NFC Modul
CS = 18
MOSI = 23
MISO = 24
SCLK = 25
# Karten fuer NFC definieren
karten = {
"hauptmenue": "hauptmenue",
"112": "finalrs",
"111": "v1"
}
letzter_tag = ""
startup = 1
class MainWindow(Gtk.Window):
def __init__(self, sensor):
global letzter_tag
self.pn532 = sensor
letzter_tag = "hauptmenue"
self.changewindow(part="hauptmenue")
def changewindow(self, part):
global startup
if startup is not 1:
window.destroy()
else:
startup = 0
builder = Gtk.Builder()
builder.add_from_file("/home/pi/Desktop/InterfacesRS/{0}.glade".format(part))
window = builder.get_object("window1")
window.show_all()
print("window changed")
def sensorabfrage(self):
global letzter_tag
uid = self.pn532.read_passive_target()
if uid is None:
if letzter_tag is not "hauptmenue":
letzter_tag = "hauptmenue"
print("Kein Tag in Reichweite!")
self.changewindow(part="hauptmenue")
data = self.pn532.mifare_classic_read_block(4)
if data is not None:
action = str(int(data[2:8].decode("utf-8"), 16))
objekt = karten.get(action)
if objekt is not None:
if objekt != letzter_tag:
letzter_tag = objekt
print(objekt)
self.changewindow(part=objekt)
return True
def startsensortimer(self):
GObject.timeout_add(400, self.sensorabfrage)
def main():
pn532 = PN532.PN532(cs=CS, sclk=SCLK, mosi=MOSI, miso=MISO)
pn532.begin()
pn532.SAM_configuration()
win = MainWindow(sensor=pn532)
win.startsensortimer()
Gtk.main()
if __name__ == "__main__":
main()
Скопируйте из комментария : Я немного поработал и получил свой глобальный var в классе.
НоТеперь я получаю эту ошибку: окно изменило тег Kein в Reichweite!
Traceback (most recent call last): File "sensorUI.py", line 53, in sensorabfrage
self.changewindow(part="hauptmenue") File "sensorUI.py", line 38, in changewindow
window.destroy()
UnboundLocalError: local variable 'window' referenced before assignment