Seite 1 von 1

[solved] FileDropObject

Verfasst: Mittwoch 16. April 2008, 16:14
von nkoehring
Hallo,

ich wuerde gern ein echtes FileDropObject erzeugen. Ich weiß nicht ob ich das richtig nenne, aber es geht darum, dass ich per Drag'n'Drop aus einer Liste in meinem Programm einen Kopiervorgang einer Datei initiieren kann.

ZB habe ich eine DateiList in meinem Programm. Ziehe ich nun ein oder mehrere ListenElement(e) von dort in den Windows-Explorer oder in einen entsprechenden GUI-DateiManager unter Linux, moechte ich die Datei dorthin kopieren. Umgedreht - also Dateien vom Dateimanager in meine Liste zu ziehen klappt schon.

Danke fuer Tipps im Voraus.

Verfasst: Freitag 18. April 2008, 12:08
von nkoehring
Hmm... also kann man FileDropEvents zwar auffangen aber nicht selbst ausloesen? :-/

wxFileDataObject

Verfasst: Freitag 18. April 2008, 14:15
von droptix
Hab mal eben schnell gegoogelt, mein Vorschlag:

Beim Draggen ein `wxFileDataObject` erzeugen und mittels `AddFile()` den absoluten Pfad als Unicode-String eintragen. Mich würde interessieren, was beim Droppen passiert -> also z.B. beim Loslassen im Windows Explorer.

:twisted:

Verfasst: Freitag 18. April 2008, 16:04
von nkoehring
Es funktioniert! Ist eigentlich genau das gleiche wie sonst, nur das man eben dieses FileDataObject erzeugt und dessen AddFile-Methode verwendet.

In etwa so hier:

Code: Alles auswählen

    def on_drag_listitem(self, evt):
        fdata = wx.FileDataObject()
        idx = -1
        while True: # find all the selected items and put them in a list
            idx = self.GetNextItem(
                idx,
                wx.LIST_NEXT_ALL,
                wx.LIST_STATE_SELECTED
            )
            if (idx == -1):
                break
            fdata.AddFile(self.list.GetItemText(idx))

        # Now make a data object for the  item list.
        data = wx.DataObjectComposite()
        data.Add(fdata)

        # Create drop source and begin drag-and-drop.
        dropSource = wx.DropSource(self)
        dropSource.SetData(data)
        res = dropSource.DoDragDrop(flags=wx.Drag_CopyOnly)
@Droptix: Es funktioniert dann genau so wie es sollte. Beim "droppen" ueber einem Windows-Explorer-Fenster wird die Datei dorthin kopiert.

Verfasst: Freitag 18. April 2008, 17:30
von droptix
nkoehring hat geschrieben:@Droptix: Es funktioniert dann genau so wie es sollte. Beim "droppen" ueber einem Windows-Explorer-Fenster wird die Datei dorthin kopiert.
Cool, geht das auch unter Linux? Also wandelt wxPython das wxFileDataObject auch wieder zurück in ein Ding, womit das Betriebssystem was anfangen kann? Ist ja echt Klasse!