TreeView und Drag and Drop

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Yaso
User
Beiträge: 30
Registriert: Freitag 1. April 2011, 08:00

Hallo

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()

Antworten