1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| # -*- coding:utf-8 -*-
import pygtk
pygtk.require('2.0')
import gtk
#------------------------------------------------------------------------------
class TestMove(gtk.Fixed):
"""Zone avec étiquettes déplaçables."""
def __init__(self):
gtk.Fixed.__init__(self)
self.set_size_request(300, 300)
self.coords = None
self.subwidgets = {}
self.connect('button-release-event', self.on_button_release)
def new_child(self, widget, x, y):
eb = gtk.EventBox()
eb.add(widget)
eb.add_events(gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.BUTTON_PRESS_MASK)
eb.connect('button-press-event', self.on_button_press)
self.put(eb, x, y)
self.subwidgets[eb] = (x, y)
return
def on_button_press(self, widget, event):
if (event.type == gtk.gdk.BUTTON_PRESS) and (event.button == 1):
#print event
self.coords = (widget, event.x, event.y)
self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND1))
return
def on_button_release(self, widget, event):
#print event
if self.coords != None:
w = self.coords[0]
x0, y0 = self.subwidgets[w]
xx = int(x0 - self.coords[1] + event.x)
yy = int(y0 - self.coords[2] + event.y)
self.move(w, xx, yy)
self.subwidgets[w] = (xx, yy)
self.window.set_cursor(None)
self.coords = None
return
#------------------------------------------------------------------------------
if __name__ == '__main__':
win = gtk.Window()
win.connect('destroy', gtk.main_quit)
tm = TestMove()
tm.new_child(gtk.Label("Hello !"), 200, 150)
tm.new_child(gtk.Label("Salut !"), 150, 100)
win.add(tm)
win.show_all()
gtk.main()
#------------------------------------------------------------------------------ |
Partager