Проблема чтения модуля NFC при отображении интерфейса GTK - PullRequest
0 голосов
/ 30 сентября 2019

В настоящее время я программирую скрипт на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...