[Python-de] wxPython und Ziehen und Tropfen

Gerson Kurz gerson.kurz at pergamon-software.de
Fre Aug 8 09:43:45 EDT 2003


Ich möchte ein Fenster haben, das Files per Drag&Drop empfangen und senden
kann. Mein Problem ist: Das Fenster kann zwar vom Explorer Files empfangen,
und dem Explorer Files senden, aber sich nicht selbst welche zuschustern.

Folgender Beispielcode verdeutlicht das Problem:

import wx

class MyFileDropTarget(wx.FileDropTarget):
    def __init__(self, parent):
        wx.FileDropTarget.__init__(self)
        self.parent = parent

    def OnDropFiles(self, x, y, files):
        for file in files:
            self.parent.c.InsertStringItem(0, file)

class TestFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "test")
        size = self.GetClientSize()
        self.c = wx.ListCtrl(self, 1860,
            style=wx.LC_REPORT|wx.SUNKEN_BORDER,
            size=size, pos=(0,0))

        self.c.InsertColumn(0, "Filename",
            width = size[0])

        wx.EVT_MOTION(self.c, self.onStartDrag)
        self.SetDropTarget(MyFileDropTarget(self))

    def onStartDrag(self, evt):
        if evt.Dragging():
            data = wx.FileDataObject()
            data.AddFile("C:\\irgendeine.exe")
            dropSource = wx.DropSource(self)
            dropSource.SetData(data)
            dropSource.DoDragDrop(0)
        evt.Skip()

class TestApp(wx.App):
    def OnInit(self):
        frame = TestFrame()
        frame.Show(True)
        return True

if __name__ == '__main__':
    TestApp(0).MainLoop()

Du kannst

- Dateien aus dem Explorer auf das Fenster ziehen
- Einträge aus dem Fenster auf den Explorer ziehen

Du kannst nicht

- Einträge aus dem Fenster auf das Fenster (z.B. eine 2. Instanz des
Programms) ziehen

Was mache ich falsch? (Ach ja, Version ist wxPython 2.4.1.2 mit Python 2.3)