2012-07-09 10 views
12

Sto cercando di creare un'applicazione di disegno semplice usando Python e gnomecanvas. Purtroppo, sembra che non ci sia documentazione per i collegamenti Python per gnomecanvas di sorta. Quindi, mi sto borbottando usando gli esempi di codice e cercando di indovinare dalle associazioni C.C'è un modo per aggiungere a un bpath canvas gnome esistente in Python?

Così com'è, ho il codice di lavoro, mantenendo un elenco di punti di corrente in un ictus e la generazione di un nuovo oggetto percorso da questa lista in ogni nuovo elemento:

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

Questo mi sembra di essere un metodo piuttosto inefficiente: generare un nuovo oggetto ogni volta che si muove il puntatore; e considerando che sto ottenendo la precisione subpixel dal mio tablet questo è piuttosto spesso.

La mia domanda è: c'è un modo in cui posso semplicemente aggiungere al bpath esistente su ogni movimento del puntatore come farei nella versione C di questa libreria?

Su una nota correlata, c'è qualche documentazione per questa API perché ho fatto ore di googling che non mi hanno dato nulla in cambio.

risposta

1

C'è una buona documentazione libgnomecavas 2.3 sull'API C nativa, che contiene la descrizione di tutte le funzioni C per funzionare con gnomecanvas.

I collegamenti Python non espongono tutte le API descritte in generale, e le funzioni desiderate in particolare, e non c'è documentazione sui collegamenti Python per la tela di gnome, tutte le forze sono state inviate per sviluppare cose relative a Gnome3 (puoi esplorarle a live.gnome.org).

Un'altra cosa è che gnomecavas è obsoleto e anche i collegamenti Python; e non ci sono piani per supportarli in futuro (ad esempio le ultime versioni di Ubuntu hanno questo pacchetto appena copiato da una versione all'altra senza modifiche).

Ma c'è un'altra libreria di tela chiamata GooCanvas che utilizza il Cairo per disegnare sullo schermo e sembra essere più aggiornata, avendo PyGooCanvas collegamenti Python e utilizzato da alcuni progetti molto diffusi, come Pitivi.


Problemi correlati