Interaktionsmöglichkeit gesucht...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
df8oe
User
Beiträge: 4
Registriert: Sonntag 30. November 2014, 19:15

Hallo an alle,

ich bin "neu" bei Python. Ich nutze es auf meinem Raspberry, um elektronische Baugruppen via spi-Bus anzusteuern. Das klappt soweit auch schon recht gut - es hilft, wenn man andere Sprachen (bash, C, C++, PHP) spricht :)

Nun stehe ich an folgender Stelle und auch Mr. google hat mich mehr verwirrt als geholfen:

Ich bin mir bei drei SPI-Speicherstellen nicht sicher, was ich da für einen Wert übertragen muss, Dummerweise beeinflussen sich die drei Einstellungen auch noch gegenseitig. Klar: ich könnte das Script stets abbrechen, die Variable im Quellcode erneut zuweisen und dann neu starten. Dauert bei drei Speicherstellen aber eine gefühlte Ewigkeit.

Einfacher wäre es, wenn ich 6 Tasten definieren könnte, und bei einem Druck auf die Taste wirde Speicherstelle 1, 2 oder 3 jeweils um einen Wert erhöht bzw. erniedrigt.

Die Codestellen zum verändern der Variablen sind trivial und fertig. Mir ist es aber bislang nicht gelungen, eine Funktion unter Python zu finden, die den Scancode (oder irgendwas anderes) einer evtl. gedrückten Taste zurückgibt und NICHT ANHÄLT BIS EINE TASTE GEDRÜCKT IST.

Bedeutet: Ich möchte die Ausgaben meines Programmes weiter sehen. Dann tippe ich eine meiner "magischen Steuertasten" an und die Tastendrücke werden zum Verändern der Variablen ausgewertet. Keine Taste gedrückt ==> Programm läuft so weiter ab wie bisher und wartet auf nix (vor allem keinen Tastendruck). Das Programm darf nicht anhalten - das ist der Knackpunkt!

Sehe ich den Wald vor lauter Bäumen nicht oder ist das tatsächlich nicht so einfach??

Gruß
df8oe
BlackJack

@df8oe: Das ist plattformübergreifend nicht einfach. Wenn Dir eine Lösung reicht die ohne Zusatzmodule unter Linux läuft, dann gibt es in der Standardbibliothek das `curses`-Modul mit dem man Textoberflächen programmieren kann wo man auf einzelne Tastendrücke reagieren kann.

Wenn es auch etwas externes sein darf, ist `urwid` eine etwas schönere API die darauf aufbaut.
df8oe
User
Beiträge: 4
Registriert: Sonntag 30. November 2014, 19:15

Plattformübergreifend muss es nicht sein. Python und der Raspi dienen mir als Entwicklungsumgebung und später kommt das erarbeitete Ergebnis dann in einen Microcontroller (programmiert in C oder Assembler).

Mit curses hatte ich auch schon mal rumgebastelt - mir ist da aber nur die getchr() Funktion aufgefallen, und wenn das Programm an die Stelle kommt dann hält es an, bis eine Taste gedrückt ist. Das kann ich so nicht gebrauchen. Wenn keine Taste gedrückt ist, darf das Programm nicht anhalten und "warten".

Wenn urwid auf curses aufbaut, dann muss ich vorher wissen, ob es in curses solch eine Funktion gibt...

Danke für Deine Antwort - ich bin erleichtert, dass es doch etwas komplizierter ist - also keine "dumme Frage" ;)

Gruß
df8oe
BlackJack

@df8oe: Das verhalten von `window.getch()` kann man mit der `nodelay()`- oder der `timeout()`-Funktion beeinflussen, so dass -1 zurückgegeben wird wenn keine Tastendrücke zum Verarbeiten vorliegen.
df8oe
User
Beiträge: 4
Registriert: Sonntag 30. November 2014, 19:15

Vielen Dank - das war genau das, was ich gesucht habe :)

Problem gelöst!

Gruß
df8oe
Antworten