[solved] FileDropObject

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Mittwoch 16. April 2008, 16:14

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.
Zuletzt geändert von nkoehring am Freitag 18. April 2008, 16:04, insgesamt 1-mal geändert.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Freitag 18. April 2008, 12:08

Hmm... also kann man FileDropEvents zwar auffangen aber nicht selbst ausloesen? :-/
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Freitag 18. April 2008, 14:15

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:
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Freitag 18. April 2008, 16:04

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.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Freitag 18. April 2008, 17:30

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