Seite 1 von 1
Priorität auf wxPython
Verfasst: Montag 12. September 2005, 14:05
von Toni83
Hallo,
Ich habe ein Problem mit meiner GUI.
Ich habe zwei Buttons einen für das Starten eines Schrittmotors und einen für das Stoppen dieses Schrittmotors.
Wenn ich Start drücke wird aus dem Event heraus eine andere Klasse Motor aufgerufen, die den Motor verfährt.
Wenn ich nun Stopp drücke in der GUI-Klasse möchte ich den Motor mit einem Thread stoppen. Dies ist jedoch nicht möglich weil ich den Button nicht drücken kann. Python ist so dermaßen damit beschäftigt die Daten über den Parallelport an den Schrittmotor zu übergeben, dass es nicht möglich ist den Motor zu stoppen bzw. den Button zu drücken. (Keine Rückmeldung)
Wie kann ich trotzdem noch den Button während dem verfahren drücken?
Gruss,
Toni
Verfasst: Mittwoch 14. September 2005, 12:00
von CM
Hoi,
Du verwendest schon für den Motor einen anderen Thread? Dann verstehe ich Dein Problem nicht so ganz - ich möchte vermuten, daß sich irgendwo ein Bug befindet. Ist es viel Code oder könntest Du ihn hier (zumindest in Auszügen) posten?
Gruß,
Christian
Verfasst: Montag 26. September 2005, 08:41
von Toni83
Hallo Christian,
sorry für die späte Antwort. Ich war im Urlaub.
Den Code hier herein zu stellen wäre keine sehr gute Idee, da es insgesamt über 8000 Zeilen sind. Auszüge wären auch nicht machbar, da ziemlich viele Assoziationen vorhanden sind.
Ich weiss, das es somit schwierig wird mir zu helfen...
Ich glaube aber nicht, dass der Thread schuld daran ist, dass ich keinen Button während der Laufzeit des Motors mehr drücken kann.
Ich glaube auch nicht, dass ein Programmfehler schuld daran ist. Eher habe ich das Gefühl, dass Python so dermaßen damit beschäftigt ist, die Daten über den Parallelport zu versenden, dass er meine grafische Oberfläche in dem Moment vergisst.
Gibt es nicht so eine Art "Befehl", der Python immer wieder auf die grafische Oberfläche verweist, damit ich den Button drücken kann?
Gruss,
Toni
Verfasst: Montag 26. September 2005, 09:48
von jens
Toni83 hat geschrieben:Eher habe ich das Gefühl, dass Python so dermaßen damit beschäftigt ist, die Daten über den Parallelport zu versenden, dass er meine grafische Oberfläche in dem Moment vergisst.
Das müßte sich allerdings im Taskmanager zeigen! Wenn du unter Windows arbeitest, kannst du dir mal den
Process Explorer von sysinternals anschauen. Da kann man die einzelnen Threads eines Processes genauer untersuchen...
Verfasst: Montag 26. September 2005, 14:26
von Toni83
Servus jens,
super Idee die Prozesse zu überwachen. Die CPU ist doch nicht ausgelastet. (ca. 10% Auslastung)
Ich kann mir dann nicht erklären, warum meine grafische Oberfläche während des Motorlaufs nicht ansprechbar ist.
Ich habe meine grafische Oberfläche mit dem Interface-Builder wxGlade erstellt, somit schließe ich einen Programmfehler aus.
Sobald ich den Button Start drücke werden die Daten über den Parallelport übersandt, dann scheint Python die grafische Oberfläche zu vergessen. Ich kann dann keine Buttons mehr drücken, z.B. Motorstop (keine Rückmeldung von der GUI). Sobald er aber mit dem Motorverfahren fertig ist, ist die GUI wieder ansprechbar. Wie verhext !
Gruss,
Toni
Verfasst: Montag 26. September 2005, 15:04
von jens
Vielleicht blockiert irgendeine Funktion beim senden zum Parallelport? Vielleicht reicht nach dem senden ein xxx.close() ?
Verfasst: Montag 26. September 2005, 16:50
von Leonidas
Kannst ja versuchen in der "Aufruf"-Funktion einen Thread zu starten, der den Rest ausführt (ich weiß, dass du schon einen Thread hast, aber mir scheint, dass er irgendwie nicht wirklich funktioniert).
Ich hätte noch zwei Seiten aus dem wxpython Wiki für dich, die dir helfen könnten:
LongRunningTasks und
WorkingWithThreads. Allerding ist dort noch alles mit
from wxPython.wx import *, jetzt sollte man aber
import wx benutzen.
Vielleicht sind Threads überhaupt unnötig? GTK+ hat eine Funktion
gobject.idle_add() die für genau solche Sachen gedacht ist - und man sich dadurch nicht mit Threads rumschlagen muss.
Verfasst: Montag 26. September 2005, 17:45
von Toni83
Hallo,
Danke für die Antworten. Ich werde bis morgen alle Ideen mal durchgehen.
Ich habe jetzt auch eine Test-GUI mit Tkinter erstellt und dies anstelle von der wxPython GUI ersetzt. Jetzt geht es zwar, aber ich brauche die GUI in wxPython. Das Problem liegt also bei wxPython...
Keine Ahnung woran das liegt. Programmfehler schliesse ich wie gesagt aus...
Gruss,
Toni
Verfasst: Donnerstag 29. September 2005, 08:41
von Toni83
Hallo,
Habe jetzt die letzten Tage versucht das Problem zu finden, leider ohne Erfolg.
Ich habe jetzt beschlossen ein anderes Frame zu öffnen und dort die Buttons Stopp und Weiter hereinzustellen.
Falls jemand noch eine Idee hat woran es liegen kann, dass ich während des Motorlaufs nicht auf meine ursprüngliche GUI zugreifen kann, wäre ich dankbar wenn ihr diese hereinstellen könntet.
Danke,
Toni
Verfasst: Donnerstag 29. September 2005, 08:49
von Toni83
Hallo,
Ich kann keine neuen Beiträge mehr erstellen!!!
Ich muss also in diesem Beitrag mein anderes Problem ansprechen:
ich habe das Problem, dass wenn ich einen Beitrag senden will folgendes danach erscheint:
####################################################
Could not insert new word
DEBUG MODE
SQL Error : 1016 Can't open file: 'phpbb_search_wordlist.MYI'. (errno: 145)
INSERT IGNORE INTO phpbb_search_wordlist (word_text, word_common) VALUES ('anderes', 0), ('auf', 0), ('beschlossen', 0), ('buttons', 0), ('dankbar', 0), ('danke', 0), ('das', 0), ('dass', 0), ('des', 0), ('die', 0), ('diese', 0), ('dort', 0), ('ein', 0), ('eine', 0), ('erfolg', 0), ('falls', 0), ('finden', 0), ('frame', 0), ('gui', 0), ('habe', 0), ('hallo', 0), ('hat', 0), ('hereinstellen', 0), ('hereinzustellen', 0), ('ich', 0), ('idee', 0), ('ihr', 0), ('jemand', 0), ('jetzt', 0), ('kann', 0), ('könntet', 0), ('leider', 0), ('letzten', 0), ('liegen', 0), ('meine', 0), ('motorlaufs', 0), ('nicht', 0), ('noch', 0), ('ohne', 0), ('problem', 0), ('stopp', 0), ('tage', 0), ('toni', 0), ('und', 0), ('ursprüngliche', 0), ('versucht', 0), ('weiter', 0), ('wenn', 0), ('woran', 0), ('während', 0), ('wäre', 0), ('zugreifen', 0), ('öffnen', 0)
Line : 234
File : functions_search.php
####################################################
Woran liegt das und wie kann man dies beheben? Und warum kann ich keine neuen Beiträge mehr senden?
Gruss,
Toni
Verfasst: Donnerstag 29. September 2005, 15:14
von Leonidas
Das war ein generelles Foren-Problem, das ist nun korrigiert.
Verfasst: Donnerstag 29. September 2005, 21:56
von BlackJack
Toni83 hat geschrieben:Ich habe jetzt auch eine Test-GUI mit Tkinter erstellt und dies anstelle von der wxPython GUI ersetzt. Jetzt geht es zwar, aber ich brauche die GUI in wxPython. Das Problem liegt also bei wxPython...
Keine Ahnung woran das liegt. Programmfehler schliesse ich wie gesagt aus...
Bei einem 8000 Zeilen Programm schliesst Du einen Programmierfehler aus? Das ist mutig!
Was macht denn die Funktion, die beim drücken des Start-Buttons ausgeführt wird? Bist Du sicher das sie sofort die Kontrolle an die GUI zurückgibt?