diff options
Diffstat (limited to 'gtk3-drag-and-drop-example.py')
-rw-r--r-- | gtk3-drag-and-drop-example.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/gtk3-drag-and-drop-example.py b/gtk3-drag-and-drop-example.py new file mode 100644 index 0000000..4a899b7 --- /dev/null +++ b/gtk3-drag-and-drop-example.py @@ -0,0 +1,73 @@ +from gi.repository import Gtk +from gi.repository import GdkPixbuf +from gi.repository import Gdk +from gi.repository import Pango + +# The images used in this example are these ones: +# http://git.gnome.org/browse/pygobject/tree/demos/gtk-demo/demos/data/apple-red.png + +def _destroy_cb(widget, data=None): + Gtk.main_quit() + +def drag_begin_event(widget, context, data): + print 'drag_BEGIN_event' + widget.drag_source_set_icon_pixbuf(widget.get_child().get_pixbuf()) + +def drag_data_get_event(widget, context, selection_data, info, + timestamp, data): + print 'drag_data_GET_event' + selection_data.set_pixbuf(widget.get_child().get_pixbuf()) + +def drag_data_received_event(widget, drag_context, x, y, data, + info, time, user_data): + print 'drag_data_RECEIVED_event' + if user_data == 'Image': + widget.set_from_pixbuf(data.get_pixbuf()) + elif user_data == 'TextView': + buf = widget.get_buffer() + buf.insert_pixbuf(buf.get_start_iter(), data.get_pixbuf()) + Gtk.drag_finish(drag_context, True, False, time) + +window = Gtk.Window() +window.set_title('Gtk3 Drag And Drop Example') +window.set_default_size(300, 180) +window.connect("destroy", _destroy_cb) + + +image = Gtk.Image() +imagebuf = GdkPixbuf.Pixbuf.new_from_file('apple-red.png') +image.set_from_pixbuf(imagebuf) + +imagebox = Gtk.EventBox() +imagebox.add(image) + +imagebox.drag_source_set( + Gdk.ModifierType.BUTTON1_MASK, + [], + Gdk.DragAction.COPY) +imagebox.drag_source_add_image_targets() + +imagebox.connect('drag-begin', drag_begin_event, None) +imagebox.connect('drag-data-get', drag_data_get_event, None) + +hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) +hbox.pack_start(imagebox, True, True, 10) + +text = Gtk.TextView() +text.set_wrap_mode(Gtk.WrapMode.WORD) +text.set_editable(True) +text.modify_font(Pango.FontDescription('arial 12')) +text.connect('drag-data-received', drag_data_received_event, 'TextView') +text.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY) +# text.drag_dest_set_target_list(None) +text.drag_dest_add_text_targets() +text.drag_dest_add_image_targets() + +vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) +vbox.add(hbox) +vbox.add(text) + +window.add(vbox) + +window.show_all() +Gtk.main() |