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

  • Python: einfache Liste Zusammenführung auf Kreuzungen
  • Datenstruktur für große Bereiche aufeinander folgender Integer?
  • Konstruieren Sie einen Baum aus der Liste der Dateipfade (Python) - Leistungsabhängig
  • Python Tkinter: Baumauswahl
  • Schnellste Weg, um JSON zu erstellen, um eine Baumstruktur in Python / Django mit mptt zu reflektieren
  • Maximale Rekursionstiefe unter Verwendung von Python's Pickle / cPickle
  • 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"

  • Wie "perfekt" einen Dict überschreiben kann?
  • 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.