[solved + example] TreeCtrl DropTarget

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

Samstag 15. Dezember 2007, 21:25

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?
Zuletzt geändert von nkoehring am Sonntag 16. Dezember 2007, 00:05, 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
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 15. Dezember 2007, 21:50

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Samstag 15. Dezember 2007, 22:43

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...
[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
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 15. Dezember 2007, 23:22

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Sonntag 16. Dezember 2007, 00:05

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
[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
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Sonntag 16. Dezember 2007, 00:16

nkoehring hat geschrieben:merci beaucoup
Avec plaisir!
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten