Bildwechsel nach Tastatureingabe

Fragen zu Tkinter.
Antworten
Metellus
User
Beiträge: 3
Registriert: Donnerstag 28. August 2014, 16:26

Hallo zusammen,

ich bin ja recht hartnäckig, aber so langsam fällt mir nichts mehr ein.
Mir geht es darum:
Ich tüftel schon seit längerem an eine Alarmanlage.
Diese soll betrieben warden auf dem Raspberry Pi, einen Großteil habe ich schon fertig, nun hakt es bei mir bei folgendem Problem:

Ich möchte für meine Alarmanlage den Zugangscode abfragen, der den alarmstatus dann entweder auf 1 oder 0 setzt.
Angezeigt werden ob "scharf" oder "unscharf" soll es durch 2 Bilder (wachsam = scharf, schlafen = unscharf).

Es muss also ständig im Hintergrund eine Eingabe erwartet werden.
Ist diese richtig, wird auf unscharf geschaltet und eventuelle Veränderungen am GPIO führen nicht zum Alarm, das entsprechende Bild wird angezeigt.
Ist die Eingabe nicht richtig, soll das andere Bild angezeigt werden, die Alarmanlage weiter scharf bleiben, um eine Alarmsequenz entweder auszulösen oder weiterzuführen.

Ich habe versucht, dies entweder so umzusetzen:

Code: Alles auswählen

from Tkinter import *

 FILE1 = "wachsam.gif"
 FILE0 = "schlafen.gif"

 if raw_input() == "555":
     alarmstatus = 0
     FILE = FILE0
 else:
     alarmstatus = 1
     FILE = FILE1
 print ("Alarmstatus ist ",alarmstatus)

 root = Tk()
 logo = PhotoImage(file=FILE)
 w1 = Label(root, image=logo).pack()

 root.mainloop()
oder so:

Code: Alles auswählen

from Tkinter import *

 alarmstatus = 0

 FILE1 = "wachsam.gif"
 FILE0 = "schlafen.gif"
         
 def bildanzeigen(alarmstatus):
     root = Tk()
     logo = PhotoImage(file=FILE)
     w1 = Label(root, image=logo).pack()
     root.mainloop()
   
 while True:
     if raw_input() != "555":
         alarmstatus = 1
         FILE = FILE1
     else:
         alarmstatus = 0
         FILE = FILE0
     bildanzeigen(alarmstatus)

 print ("Alarmstatus ist ",alarmstatus)
Ist mir noch zu helfen :?: :?

Gruß

Volker
Zuletzt geändert von Anonymous am Mittwoch 4. März 2015, 11:00, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@Metellus: Du kannst nicht Konsoleneingaben mit Grafischer Benutzeroberfläche mischen, weil beide völlig unterschiedliche Konzepte zur Nutzerinteraktion bieten. Wie wär's mit einem Eingabefeld und einem Knopf?
Metellus
User
Beiträge: 3
Registriert: Donnerstag 28. August 2014, 16:26

Okay,

vielen Dank, dann muss ich mir etwas Neues ausdenken.

Gibt es denn Alternativen, um in Python ein Bild anzuzeigen?
Kann ich Tkinter nur zur Anzeige eines Bildes verwenden und "von außen" per GPIO-Zustand zu- und abschalten?
Die Statusabfrage kann ich auch via GPIO mit externer Tastatur realisieren.
Ich hätte nur gern den Status "scharf" - "unscharf" per Bild auf einem kleinen Monitor visualisiert.



Gruß

Volker
BlackJack

@Metellus: Pygame wäre vielleicht eine Möglichkeit um nur Bilder anzuzeigen.

Allerdings hast Du hier ein Programm bei dem Du gleichzeitig auf GPIO und Benutzereingaben reagieren möchtest, und das ist halt nicht mehr so einfach mit einem linear ablaufenden Programm möglich wenn man blockierende Aufrufe wie `raw_input()` hat. Man wird sich da entweder in nebenläufige Programmierung mit Threads oder eben mit einem GUI-Toolkit auseinander setzen müssen, und beides ist nicht sinnvoll mit so kleinen Skriptchen machbar wo alles auf Modulebene steht und der Programmablauf rein linear ist. Da braucht man mindestens Funktionen mit sauber getrennten Schnittstellen, also keine Variablen auf Modulebene, sondern alles über Argumente und Rückgabewerte, oder objektorientierte Programmierung (OOP). Ansonsten wird das ganz schnell zu einem unübersichtlichen und schwer durchschaubaren Code-Klumpen bei dem alles mit allem irgendwie zusammenhängt.
Metellus
User
Beiträge: 3
Registriert: Donnerstag 28. August 2014, 16:26

Gut,

vielen Dank für die Hinweise, ich glaube, es bedarf nicht des Hinweises, dass ich erst am Anfang meiner Programmiererkarriere stehe oder?
:D

Ich werde mich einmal mit Pygame beschäftigen und dann die Zugangscodeabfrage über ein eigenständiges Codeschloss zu lösen versuchen, welches einen 1 oder 0 Zustand an einen GPIO übergibt. Dann benötige ich nur noch eine Routine, jeweils ein Bild anzuzeigen,.

Grüße
Volker
Antworten