Moviendo un cuadrado :P
Jugando con GooCanvas logre finalmente mover un elemento (item) sobre el canvas :)
video
Here is the code (python code, using pygoocanvas)
import goocanvas
import cairo
import gtk
def boton_presionado(item, target_item, event):
print "boton presionado"
fleur = gtk.gdk.Cursor(gtk.gdk.FLEUR)
canvas = item.get_canvas ()
canvas.pointer_grab(item,
gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.BUTTON_RELEASE_MASK,
fleur, event.time)
return True
def on_button_release(item, target, event):
canvas = item.get_canvas ()
canvas.pointer_ungrab(item, event.time)
return True
def on_enter_notify (item,target,event):
item.props.fill_color = "red"
return True
def on_leave_notify(item, target, event):
item.props.fill_color = "black"
return True
def on_motion(item, target, event):
canvas = item.get_canvas ()
change = False
if not event.state == gtk.gdk.BUTTON1_MASK:
return False
y = event.y
x = event.x
item.props.x = x - 5.0
item.props.y = y - 5.0
return True
def main():
window = gtk.Window();
window.set_title("titulo")
window.set_default_size(640,480)
window.connect("delete-event",gtk.main_quit)
scrolled_win = gtk.ScrolledWindow()
window.add(scrolled_win)
canvas = goocanvas.Canvas()
canvas.set_size_request(600,450)
canvas.set_bounds(0,0,1000,1000)
scrolled_win.add(canvas)
root = goocanvas.Group()
rect_item = goocanvas.Rect(parent=root,x=100, y=100,
width=200, height=100,
stroke_color="red", fill_color="blue",
line_width=5.0)
rect_item.connect("enter_notify_event", on_enter_notify)
rect_item.connect("leave_notify_event", on_leave_notify)
rect_item.connect("button_press_event", boton_presionado)
rect_item.connect("button_release_event", on_button_release)
rect_item.connect("motion_notify_event", on_motion)
#rect_item.connect("key_press_event",tecla_presionada)
text_item = goocanvas.Text(parent=root,text="Hello, World!",
x=250, y=150,
width=200, anchor=gtk.ANCHOR_SE,
fill_color="blue")
text_item.rotate(45, 300, 300)
canvas.set_root_item(root)
window.show_all()
gtk.main()
if __name__ == "__main__":
main()
nota: por desgracias los tabs se pierden en el blog, si alguien quiere el .py deje un comentario.
2 comentarios:
podrías haber ahorrado tiempo usando pygame, tiene implementaciones para arrastrar objetos en pantalla y claro, crear ventanas y rectangulos
sí, con pygame podría haber hecho eso, pero la gracia de lo que hice es que ese cuadrado puedo hacer que se comporte como si fuese un widget de gtk, a diferencia de pygame en donde manejo sprites y otras cosas.
en el fondo el mover el objeto es solamente la punta del iceberg
pero vale por el comentario :P
Publicar un comentario