Python TkinterTreectrl ziehen Elemente

Ich schreibe ein Programm in Python, um mir zu erlauben, durch die experimentellen Daten zu surfen, die ich genommen habe, und auch die Metadaten, die mit den experimentellen Bedingungen für jeden Datensatz assoziiert sind.

Im Mittelpunkt dieses Programms steht das TkinterTreectrl Widget, ein Wrapper für tk treectrl

Trotz eher ein Anfänger-Programmierer, so weit alles gut funktioniert – ich kann Gegenstände hinzufügen, Artikel entfernen, sie auswählen usw.

Allerdings kann ich nicht erarbeiten, wie man das Ziehen von Gegenständen an neue Orte im Baum erlaubt. Ich habe in der Dokumentation viele Referenzen gefunden, um Bilder zu ziehen, und im Moment kann ich eine verführerische, punktierte Umrisse herumziehen. Aber ich kann die Ereignisse nicht finden, die per Drag & Drop erzeugt werden. Das nächste, was ich im Handbuch finde, ist die folgende Veranstaltung:

 <Drag-begin> <Drag-receive> <Drag-end>: Generated whenever the user drag-and-drops a file into a directory. This event is generated by the filelist-bindings.tcl library code, which is not used by default. 

Ich weiß nicht, wie man den " filelist-bindings.tcl Bibliothekscode" benutzt, aber ich bin mir nicht sicher, ob dies der richtige Ansatz ist.

In einer verwandten Abfrage – ich dachte, ein Weg, um dies zu lösen und ähnliche Probleme wäre, jedes Ereignis von meinem Treectrl Widget zu stdout generiert zu senden. Gibt es einen Weg, dies zu tun?

Ein minimales Beispiel hier wäre viel zu groß, um von Nutzen zu sein, aber ein Auszug kann helfen:

  # add callbacks for Edit events self.t.notify_install('<Edit-begin>') self.t.notify_bind('<Edit-begin>', self.edit_begin) self.t.notify_install('<Edit-accept>') self.t.notify_bind('<Edit-accept>', self.edit_accept) self.t.notify_install('<Edit-end>') self.t.notify_bind('<Edit-end>', self.edit_end) # add callbacks for mouse clicks self.t.bind('<Button-1>', self.OnLeftClick) self.t.bind('<Button-3>', self.OnRightClick) # add callbacks for drag events self.t.notify_install('<Drag-begin>') self.t.bind('<Drag-begin>', self.OnDrag) self.t.notify_install('<Drag-recieve>') self.t.bind('<Drag-recieve>', self.OnDrag) self.t.notify_install('<Drag-end>') self.t.bind('<Drag-end>', self.OnDrag) 

Callbacks für Edit-Events und Mausklicks funktionieren gut und versuchen, die Drag-Events zu binden, erzeugt _tkinter.TclError: bad event type or keysym "Drag"

  • Python / Tkinter: Ein- und Ausschalten von Bildschirm-Updates wie wxPython Freeze / Thaw?
  • Tkinter: Wie bekomme ich Rahmen in Leinwand Fenster zu erweitern, um die Größe der Leinwand?
  • Klasse-Menü in Tkinter Gui
  • Was macht overrideredirect?
  • Wie kann ich die letzte Gleichung zurücksetzen und löschen?
  • Integrationsproblem mit PyObjC und TKinter
  • Wie benutzt man Indizes in Tkinter Label?
  • Wie man das ganze Fenster zu einem Platz auf dem Bildschirm bewegt (Tkinter, Python3)
  • One Solution collect form web for “Python TkinterTreectrl ziehen Elemente”

    Ignorieren der Tatsache, dass diese Frage nicht die neueste ist – gibt es einen bestimmten Grund, warum Sie self.t.bind anstelle von self.t.notify_bind ?

    Für mich sieht das hübsch aus wie der Punkt, an dem die Schnittstelle zu tktreecrtl von Michael die Wrapper-Funktionalität nicht benutzt, sondern versucht, <Drag-begin> direkt an eine Treectrl Instanz zu binden, die auf tkinter.Widget basiert

    • Quellenauszug:

      Klasse Treectrl (tkinter.Widget):

    tkinter.Widget hat keine Möglichkeit, ein '' Event zu finden, da dies in tktreectrl Bibliotheken generiert wird. So bekommst du die

    Schlechte Event-Typ oder Keysym "Drag"

    Das Ändern von self.t.notify_bind sollte Ihr Problem lösen.

    Python ist die beste Programmiersprache der Welt.