Seite 1 von 1

[solved + example] TreeCtrl DropTarget

Verfasst: Samstag 15. Dezember 2007, 21:25
von nkoehring
Hallo...

ich habe bei einer GUI ein DropTarget fuer einen Baum und wuerde gern wissen, wie ich herausfinde ueber welchem Eintrag das Objekt "losgelassen" wurde. Meine OnDropFiles-Methode bekommt aber nur x-y-Koordinaten.

Gibt es nen Weg entweder zu erfahren ueber welchem Baumeintrag ich bin oder die aktuelle Position des Baumeintrages in x-y-Koordinaten zu bekommen?

Re: TreeCtrl DropTarget

Verfasst: Samstag 15. Dezember 2007, 21:50
von gerold
nkoehring hat geschrieben:Gibt es nen Weg entweder zu erfahren ueber welchem Baumeintrag ich bin oder die aktuelle Position des Baumeintrages in x-y-Koordinaten zu bekommen?
Hallo nkoehring!

Vielleicht mit ``HitTest``.

mfg
Gerold
:-)

Verfasst: Samstag 15. Dezember 2007, 22:43
von nkoehring
Hi und danke fuer die schnelle Antwort gerold.

Irgendwie will mir HitTest nicht so richtig klar werden. Ich bekomme laut Dokumentation eine Konstante wx.TREE_HITTEST_xxx zurueck. Diese haben solche Bezeichnungen wie wx.TREE_HITTEST_BELOW, wx.TREE_HITTEST_ONITEM oder wx.TREE_HITTEST_BUTTON. Ich bekomme jedesmal den Wert 10, also wx.TREE_HITTEST_BELOW|wx.TREE_HITTEST_ONITEMBUTTON ... egal ob ich auf dem Element "abwerfe", oder darueber oder daneben... oder auf einem anderen Element.

Mir gehts aber eher um die Identifizierung des Elementes selbst...

Verfasst: Samstag 15. Dezember 2007, 23:22
von gerold
nkoehring hat geschrieben:Mir gehts aber eher um die Identifizierung des Elementes selbst...
Hallo nkoehring!

Aus der wxWidgets-Hilfe:
wxPython note: in wxPython both the wxTreeItemId and the flags are returned as a tuple.
Ich habe es aber nie selber ausprobiert.

mfg
Gerold
:-)

Verfasst: Sonntag 16. Dezember 2007, 00:05
von nkoehring
Ah nun... nach einigem Hin und Her... ner Menge Flucherei und der Annahme, dass diese Methode jedesmal was anderes zurueck gibt, nur um mich zu Aergern klappt es endlich :-D

Hier ein beispielhafter Code:

Code: Alles auswählen

    def drop_method(self, files, x, y):
        item, flag = self.treectrl.HitTest(wx.Point(x, y))

        if item.IsOk():
            print "Would add files to \""+self.treectrl.GetItemText(item)+"\"."
        else:
            print "No hit."
Wobei das Droptarget halt die gegebene Methode uebergeben bekommt und OnDropFiles ungefaehr so aussehen koennte:

Code: Alles auswählen

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

    def OnDropFiles(self, x, y, filenames):
        print "\n%d file(s) dropped at %d,%d:\n" %(len(filenames), x, y)
        print '\n'.join(['\t'+file for file in filenames])
        self.drop_method(filenames, x, y)

merci beaucoup gerold ;)
...ja ich weiß, mit ner Frauenstimme wird das noch viel besser klingen :-D

Verfasst: Sonntag 16. Dezember 2007, 00:16
von gerold
nkoehring hat geschrieben:merci beaucoup
Avec plaisir!