Ich möchte in einem TreeView ein DnD implementieren um spezielle Aktionen beim sortieren durchzuführen. Jedoch klappt das schon mal im Ansatz nicht, da ich kein Signal beim drop bekomme.
Hab nun mal ein ähnliches TreeView aus dem Tutorial genommen http://www.pygtk.org/pygtk2tutorial/ch- ... idget.html und dieses um http://www.pygtk.org/pygtk2tutorial/sec ... Reordering versucht zu erweitern.
Meine Erweiterung ist zwischen dem ''' MY EXTRA CODE ''' Kommentar
Das drag funktioniert, aber wie gesagt, bekomme ich kein drop signal, ausser ich ziehe ein File rein, was nicht der Sinn der Sache ist. :K
weiss jemand einen Rat?
Ich arbeite mit pyGTK, python 27 und WinXP
Danke
Code: Alles auswählen
#!/usr/bin/env python
# example basictreeview.py
import pygtk
pygtk.require('2.0')
import gtk
class BasicTreeViewExample:
def delete_event(self, widget, event, data=None):
gtk.main_quit()
return False
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("Basic TreeView Example")
self.window.set_size_request(200, 200)
self.window.connect("delete_event", self.delete_event)
self.treestore = gtk.TreeStore(str)
for parent in range(4):
piter = self.treestore.append(None, ['parent %i' % parent])
for child in range(3):
self.treestore.append(piter, ['child %i of parent %i' %
(child, parent)])
self.treeview = gtk.TreeView(self.treestore)
self.tvcolumn = gtk.TreeViewColumn('Column 0')
self.treeview.append_column(self.tvcolumn)
self.cell = gtk.CellRendererText()
self.tvcolumn.pack_start(self.cell, True)
self.tvcolumn.add_attribute(self.cell, 'text', 0)
self.tvcolumn.set_sort_column_id(0)
''' MY EXTRA CODE '''
TARGETS = [
('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0),
('text/plain', 0, 1),
('TEXT', 0, 2),
('STRING', 0, 3),
]
self.treeview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, TARGETS, gtk.gdk.ACTION_DEFAULT)
self.treeview.enable_model_drag_dest(TARGETS, gtk.gdk.ACTION_DEFAULT)
self.treeview.connect("drag_drop", self.drag_data_drop_data)
self.treeview.connect("drag_data_get", self.drag_data_get_data)
self.treeview.connect("drag_data_received", self.drag_data_received_data)
self.window.add(self.treeview)
self.window.show_all()
def drag_data_drop_data(self, treeview, context, selection, target_id, etime):
print "DROP"
return True
def drag_data_get_data(self, treeview, context, selection, target_id, etime):
print "GET"
return True
def drag_data_received_data(self, treeview, context, selection, target_id, etime):
print "RECEIVED"
return True
'''END MY EXTRA CODE '''
def main():
gtk.main()
if __name__ == "__main__":
tvexample = BasicTreeViewExample()
main()