2008-08-25 6 views
5

Ich bin etwas perplex durch Drag & Drop in wxPython (aber vielleicht bezieht sich diese Frage auch Drag & Drop in anderen GUI-Frameworks). Die Frameworks stellen einige Callbacks (OnEnter und OnDragOver) bereit, mit denen ich angeblich dem System mitteilen kann, ob die aktuelle Mausposition ein gültiger Ort ist, an dem das, was gerade gezogen wird, abgelegt wird. Von diesen Methoden kann ich wx.DragNone, wx.DragCopy, etc. zurückgeben. Was mich verblüfft ist, dass ich innerhalb dieser Methoden GetData nicht aufrufen darf, was bedeutet, dass ich die Daten, die der Benutzer zieht, nicht untersuchen darf. Wenn ich die Daten nicht sehen kann, wie soll ich dann wissen, ob es für den Benutzer in Ordnung ist, hier abzulegen?wxpython: Wie untersuche ich gezogene Daten in OnDragOver?

Antwort

1

Eine Lösung, die ein Hack von begrenzter Nützlichkeit ist, ist, wenn ein Ziehen initiiert wird, speichern Sie die gezogenen Daten in einer globalen oder statischen Referenz irgendwo. Auf diese Weise können Sie in den Handlern OnEnter und OnDragOver einen Verweis auf die gezogenen Daten erhalten. Dies ist natürlich nur nützlich für Drags innerhalb der gleichen Anwendung (eigentlich die gleiche Instanz der Anwendung).

1

Es gibt keine Möglichkeit, gezogene Daten in den Methoden OnEnter und OnDragOver zu sehen.

Die einzige Lösung, die ich gefunden habe, ist, das gezogene Element in einer Instanzvariablen zu speichern, die dann in diesen Methoden lesbar ist.

+0

Können Sie ein wenig erweitern. Ich plane Wx für ein lustiges Projekt zu verwenden. Ziehen mit einer x/y-Rendite war etwas, auf das ich zählte. –

+0

Oh, Sie können sehen, wo die Daten fallen, Sie können einfach nicht sehen, was beim Ziehen gezogen wird (bevor der Benutzer die Maustaste loslässt), was manchmal nützlich ist (zB wenn Sie den Mauszeiger abhängig von ändern möchten gezogener Inhalt). – DzinX