Warum ist WxPythons Bewegungserkennung so langsam?

8

Ich setze on_motion auf EVT_MOTION . Ich möchte, dass die Mausposition für interaktiv ein koordinatenspezifisches Bild erzeugt, aber WxPython hat eine ~ 400ms Verzögerung bei der Registrierung von aufeinanderfolgenden Bewegungsereignissen. Das macht die Schnittstelle träge.

Warum ist EVT_MOTION so langsam und wie repariere ich es? Ich habe es in Ubuntu 11.10 und WinXP versucht und die Verzögerungen sind vergleichbar?

Ich brauche schnelle Antwortzeiten für die Auswahl eines Teils aus einem Bild wie das Bild zeigt. So wie es ist, folgt das "Fadenkreuz" der Maus zu langsam.

Hier ist der Code, den ich probiert EVT_MOTION :

%Vor%     
aitchnyu 01.06.2012, 11:20
quelle

3 Antworten

3

Die aktuelle Frage ist unvollständig, da es keine Beispiel-App gibt, um das Problem zu demonstrieren. Allerdings würde ich sagen, dass der Bewegungshandler nichts mit Ihrem Problem zu tun hat, da Sie höchstwahrscheinlich teure Operationen zwischen nachfolgenden Bewegungshandlern durchführen (wie zum Beispiel das Aktualisieren Ihrer gesamten Zeichenfläche).

Wenn dies der Fall ist (und Sie können leicht überprüfen, ob Ihre Zeichenroutine zwischen Mausbewegungsereignissen aufgerufen wird), würde ich Folgendes vorschlagen:

  1. Wenn Ihre Zeichnung sich selbst stopft, stellen Sie sicher, dass Sie eine doppelte Pufferung verwenden (via wx.BufferedPaintDC);
  2. Wenn Ihre Paint-Routine tatsächlich zwischen Mausbewegungen aufgerufen wird, versuchen Sie nur den beschädigten Teil Ihres Plots zu aktualisieren (via RefreshRect);
  3. Verwende wx.Overlay, um deine rechteckige Auswahl zu zeichnen (es gibt ein paar Demos, wie das geht);
  4. Veröffentlichen Sie eine kleine, ausführbare Beispielanwendung, die das Problem veranschaulicht.
Infinity77 08.06.2012, 18:40
quelle
2

Der EVT_MOTION wird jedes Mal ausgelöst, wenn die Maus bewegt wird! Wenn Sie dann event.GetPosition() bei jeder Bewegung aufrufen und auch die Daten verarbeiten, verlangsamt dies die Performance. Wie wäre es, EVT_LEFT_DOWN oder etwas Ähnliches zu verwenden und dann die Position zu erhalten und diese Daten zu verarbeiten. Dies wird viel effizienter, da Sie nur nach einem bestimmten Bereich des Bildes suchen.

    
Gerald Spreer 06.06.2012 19:10
quelle
2

Wir müssen wirklich sehen, was sonst in der Anwendung passiert, um Ihnen sinnvolle Antworten geben zu können, obwohl viele Leute in der Lage sind, die Probleme selbst zu lösen, indem sie eine kleine Probe erstellen, die das Problem demonstriert mit anderen teilen.

Ссылка

Optimieren, wie Sie das Fadenkreuz zeichnen und / oder wie Sie den Hauptinhalt des Fensters aktualisieren, ist wahrscheinlich Ihre beste Wahl, aber bis Sie mehr Details teilen, können wir nur raten.

    
RobinDunn 08.06.2012 18:36
quelle

Tags und Links