In diesem Forum wurde mir schonmal bei einem Problem mit Python und GTK geholfen... das betreffende Programm ist nun auch fast fertig Auch der Teamstand, in den das Programm integriert wird nimmt langsam Form an aber jetzt sitze ich an dem letzten Problem...
Zuerst wollte ich in meinem Programm immer eine Interface schließen und ein anderes öffnen... die Performance lässt aber zu wünschen übrig und deshalb habe ich mir nun überlegt zu beginn ein Interface zu öffnen und ein GTK.image auszutauschen. Dafür habe ich mich an diesem Thread bei Stackoverflow orientiert: https://stackoverflow.com/questions/442 ... ython3-gtk
Nun habe ich folgendes Programm, aber es bleibt nur das bild geladen das ich in glade auswähle ...:
Code: Alles auswählen
from datetime import datetime
import time
import binascii
import socket
import signal
import sys
import argparse
import Adafruit_PN532 as PN532
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject
from neopixel import *
# Pins NFC Modul
CS = 18
MOSI = 23
MISO = 24
SCLK = 25
# Karten fuer NFC definieren
karten = {
"hauptmenue": "hauptmenue",
"112": "finalrs",
"111": "v1"
}
...
GLADEFILE = "/home/pi/Desktop/InterfacesRS/hauptmenue.glade"
# Karten Typ (Mifare)
CARD_KEY = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
class MainWindow(Gtk.Window):
letzter_tag = ""
def __init__(self, sensor, led):
global letzter_tag
self.pn532 = sensor
self.statusLED = led
self.window = None
letzter_tag = "hauptmenue"
self.builder = Gtk.Builder()
self.builder.add_from_file(GLADEFILE)
self.window = self.builder.get_object("window1")
self.interfaceImg = self.builder.get_object("image1")
self.interfaceImg.set_from_file = "/home/pi/Desktop/InterfacesRS/menu.png"
self.window.show_all()
print("window intialized")
def changewindow(self, part):
# change picture
print("anderung")
self.interfaceImg.set_from_file = "/home/pi/Desktop/InterfacesRS/v1"
print("rendered")
#self.interfaceImg.show()
...
def sensorabfrage(self):
uid = self.pn532.read_passive_target()
if uid is None:
if self.letzter_tag is not "hauptmenue":
self.letzter_tag = "hauptmenue"
print("Kein Tag in Reichweite!")
self.changecolor(Color(84, 0, 173))
self.changewindow(part="hauptmenue")
else:
if not self.pn532.mifare_classic_authenticate_block(uid, 4, PN532.MIFARE_CMD_AUTH_B,
CARD_KEY):
print('Kartenfehler')
self.fehler()
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 != self.letzter_tag:
self.letzter_tag = objekt
print(objekt)
self.changecolor(Color(255, 0, 0)) # LED gruen
self.changewindow(part=objekt)
return True
def startsensortimer(self):
GObject.timeout_add(300, self.sensorabfrage)
def main():
pn532 = PN532.PN532(cs=CS, sclk=SCLK, mosi=MOSI, miso=MISO)
pn532.begin()
pn532.SAM_configuration()
strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
strip.begin()
win = MainWindow(sensor=pn532, led=strip)
win.startsensortimer()
Gtk.main()
if __name__ == "__main__":
main()
Steffen