Variablen zur laufzeit von aussen anpassen

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
c0mplx
User
Beiträge: 1
Registriert: Freitag 18. Juni 2010, 07:16

Hallo zusammen,

ich suche nach einer Möglichkeit zur Laufzeit über eine dialogbox eine variable zu verändern.
Ich habe ein Programm welches alle 125 msec Daten empfängt diese dann mit einem Schwellenwert vergleicht und dann eine Aktion ausführt.
Jetzt will ich zur Laufzeit den Schwellenwert ändern, ich dachte an eine Art Dialogbox. Wie realisiert man sowas? Ich bin relativer python Neuling, und weiss noch nicht so recht wo ich ansetzen soll.


danke
martin
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bei grafischen Oberflächen wird viel mit Ereignissen/Events gearbeitet. Solche Events sind in der Regel mit sogenannten Callback-Funktionen verbunden, die bei jedem Auftreten des Events aufgerufen werden. In diesem Fall verknüpfst du also das `onClick`-Event deines GUI-Toolkits für den Button mit einer Funktion, die die Variable verändert. Wenn du Anfänger bist, und vielleicht auch generell noch nicht soviel Erfahrung im Programmieren hast, ist das allerdings noch ein längerer Weg bis man anfangen sollte, eine GUI zu bauen. Generell empfehlenswert ist da zunächst das deutsche Python-Tutorial zu Python 3.1 (überflieg es wenigstens mal). Als Toolkit wäre mein Vorschlag dann PyQt, da es sehr ausgereift ist und auch unter Python 3.x läuft (Kompatibilät von Drittbibliotheken zu Python 3.x ist derzeit noch nicht selbstverständlich). Wenn du durch die Foren-Liste hier auf der Übersichtsseite des Python-Forums guckst, wirst du sehen, dass wir für einige Toolkits jeweils eigene Bereiche haben. Spezielle Fragen sollten also eher dort gestellt werden.
1-1-1
User
Beiträge: 12
Registriert: Freitag 9. September 2005, 08:42
Wohnort: München

Thread starten und dort den geänderten Wert eintragen.

Bei Bedarf baue ich Dir ein Muster.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

1-1-1 hat geschrieben:Thread starten und dort den geänderten Wert eintragen.

Bei Bedarf baue ich Dir ein Muster.
Und das kannst Du pauschal, ohne über das GUI-Toolkit Bescheid zu wissen? Respekt! Kann hier sonst niemand denke ich :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Mit Mitteln aus threading könnte man das schon ohne Wissen des Toolkits erstellen, die Frage ist nur ob man das will oder machen sollte. So bringen die Toolkits in der Regel Abstraktionen mit, die Dir das Leben mit Threads+GUI(+Events) entsprechend des eingesetzten Toolkits einfacher machen. PyQt z.B. hat ein threadsafe Signaling, wenn man deren eigene Threadklasse QThread einsetzt.

Schematisch ohne Wissen um das Toolkit:

- Hauptthread startet GUI-Kram (u.a. Schwellenwerteingabe)
- Nebenthread greift Daten alle 125ms ab
- Aktionen ausführen: wo Du die ausführst, hängt von den Aktionen ab, GUI-Aktionen sollten nur im Hauptthread ausgeführt werden, nutzt eine Aktion dagegen nur exclusive Ressourcen, kannst Du die getrost in einem Nebenthread abarbeiten oder müsstest entsprechend mit Locks arbeiten
- Schwellenwertauswertung: Hier hast Du das Problem, dass Du, egal wo die Auswertung stattfindet, Werte aus mindestens einem anderen Thread brauchst (Schwellenwert aus Hauptthread oder emfangene Daten aus Nebenthread). Umsetzen lässt sich das mit einem Lock auf den Datencontainer oder Du nutzt gleich einen threadsafe-Typen hierfür (z.B. Queue). Bitte keine GUI-Objekte als Datencontainer threadübergreifend einsetzen.

Alles in allem klingt Dein Ansatz nach Ereignisbasiertkeit. Da bringen die GUI-Toolkits soviel Gutes mit, dass man das nicht nachimplementieren möchte. Dafür wäre allerdings der Hinweis auf das einzusetzende Toolkit von Nöten, da das alle ein wenig anders umsetzen. Zeigt doch einfach mal, was Du bisher hast und und wo Dein Ansatz baden geht...
Antworten