2012-07-09 14 views
12

Estoy tratando de hacer una aplicación de dibujo simple usando Python y gnomecanvas. Lamentablemente, parece que no hay documentación para los enlaces de Python para gnomecanvas en absoluto. Por lo tanto, estoy torciendo el uso de muestras de código y tratando de adivinar a partir de los enlaces de C.¿Hay alguna manera de anexar un bpath canvas existente en Python?

Como es, tengo el código de trabajo, manteniendo una lista de puntos actuales en un accidente cerebrovascular y la generación de un nuevo objeto de trazado de esta lista en cada elemento nuevo:

def get_pointer_coords(self, event): 
    return self.window_to_world(event.x, event.y) 

def render_path(self): 
    path_def = gnomecanvas.path_def_new(self.cur_path) 
    self.current_item.set_bpath(path_def) 

def button_press(self, event): 
    is_core = event.device is gdk.device_get_core_pointer() 
    if is_core: 
     return 
    self.drawing = True 
    (x, y) = self.get_pointer_coords(event) 
    self.cur_path = [(gnomecanvas.MOVETO_OPEN, x, y)] 
    self.current_item = self.root().add(gnomecanvas.CanvasBpath 
             , outline_color="#A6E22E" 
             , width_pixels=1 
             , cap_style=gdk.CAP_ROUND 
             ) 

def button_release(self, event): 
    self.drawing = False 

def motion_notify(self, event): 
    is_core = event.device is gdk.device_get_core_pointer() 
    if not is_core and self.drawing: 
     (x, y) = self.get_pointer_coords(event) 
     self.cur_path.append((gnomecanvas.LINETO, x, y)) 
     self.render_path() 

Esto me parece que es un método bastante ineficiente: generar un nuevo objeto cada vez que se mueve el puntero; y teniendo en cuenta que obtengo una precisión de subpixel desde mi tableta, esto es bastante a menudo.

Mi pregunta es: ¿hay alguna manera por la que simplemente pueda agregar al bpath existente en cada movimiento del puntero como lo haría en la versión C de esta biblioteca?

En una nota relacionada, ¿hay alguna documentación para esta API porque he hecho hora de buscar en Google, que me han dado nada a cambio.

Respuesta

1

Hay una buena documentación de libgnomecavas 2.3 en C API nativa, que contiene la descripción de todas las funciones C para trabajar con gnomecanvas.

Los enlaces de Python no exponen toda la API descrita en general, y sus funciones deseadas en particular, y no hay documentación sobre enlaces de Python para gnome canvas, todas las fuerzas fueron enviadas para desarrollar cosas relacionadas con Gnome3 (puede explorarlo en live.gnome.org).

Otra cosa es que gnomecavas es bastante anticuado y enlaces Python también; y no hay planes para respaldarlos en el futuro (por ejemplo, las últimas versiones de Ubuntu tienen este paquete simplemente copiado de versión a versión sin ningún cambio).

Pero hay otra biblioteca de lienzo llamada GooCanvas que usa Cairo para dibujar en la pantalla y parece estar más actualizada, tiene PyGooCanvas enlaces de Python y es utilizada por algunos proyectos generalizados, como Pitivi.


Cuestiones relacionadas