Priorität auf wxPython

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Vielleicht blockiert irgendeine Funktion beim senden zum Parallelport? Vielleicht reicht nach dem senden ein xxx.close() ?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

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
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

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
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das war ein generelles Foren-Problem, das ist nun korrigiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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! :wink:

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?
Antworten