2012-03-30 9 views
0

Ich habe ein Problem, wenn ich versuche, Wxpython + OpenCV zur Gesichtserkennung zu implementieren.wxpython unendliches Refresh-Panel Ursache Programmzusammenbruch

Grundsätzlich ist meine Idee Design eine GUI enthält erkannte Bilder und zwei Tasten. Einer ist für den Start und der andere ist für den Stopp. Ich verwende ein Panel als Container, um jeden Frame anzuzeigen und das Panel innerhalb eines sehr kurzen Zeitintervalls unendlich zu aktualisieren.

Aber wenn ich das Programm ausführen, wenn ich auf den Startknopf klicke, wird das Programm 2 Sekunden später zusammenbrechen. Und die Stopp-Taste scheint sogar vor dem Programmzusammenbruch nutzlos.

Ich denke, es ist das Thread-Problem. Da die gesamte Benutzeroberfläche eine große Schleife ist, und wenn ich eines der Komponenten, z. B. Panel, ständig aktualisieren muss, muss ich einen anderen Thread als den Hauptthread verwenden.

Ist das richtig? Wenn ja, wie soll ich das machen? Wenn nein, bitte geben Sie mir einige zusätzliche Hinweise.

danke eine Million ~! ;)

Antwort

1

Sie sollten nicht aktualisieren, außer Sie müssen. Erfrischend unnötig ist nicht der Weg zu gehen. Nur aktualisieren, wenn sich etwas ändert. Wenn Sie einen Thread verwenden, um eine wxPython-GUI-Komponente zu aktualisieren, müssen Sie sicherstellen, dass Sie wxPython-threadsafe-Methoden wie wx.CallAfter, wx.CallLater oder wx.PostEvent verwenden. Sehen Sie eine der folgenden für weitere Informationen über Themen und wxPython:

+0

Thank you very much. Ihre Antwort ist sehr nützlich für mich, vor allem die erste: http://wiki.wxpython.org/LongRunningTasks –

+0

wxPython hat auch Komfort-Modul zum Ausführen von Multithread-Aufgaben: 'wx.lib.delayedresult'. Ich habe keine Ahnung, warum es die ganze Zeit weggelassen wird. – Fenikso

+0

Weil ich es immer vergesse;) –