2012-07-09 53 views
12

我想使用Python和gnomecanvas做一個簡單的繪圖應用程序。令人遺憾的是,似乎沒有任何關於gnomecanvas的Python綁定的文檔。因此,我無意中使用代碼示例並嘗試從C綁定中猜測。有沒有辦法在Python中追加到現有的gnome canvas bpath?

正因爲如此,我的代碼將在每一個新項目從該列表保持當前點列表中中風,生成新的路徑對象的工作:

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

在我看來這是一種相當低效的方法:每次指針移動時生成一個新對象;並考慮到我從我的平板電腦獲得亞像素精度,這往往是

我的問題是:有沒有一種方法可以簡單地追加到每個指針運動上的現有bpath上,就像我在C庫的這個庫中一樣?

在一個相關的說明,有沒有這個API的任何文檔,因爲我已經做了幾個小時的谷歌搜索沒有給我任何回報。

回答

1

本地C API有很好的libgnomecavas 2.3文檔,其中包含所有C函數與gnomecanvas一起使用的描述。

Python綁定並不公開所有描述的API,特別是你期望的函數,並且沒有關於gnome canvas的Python綁定的文檔,所有的力量都被髮送來開發與Gnome3相關的東西(你可以在live.gnome.org)。

另一件事是gnomecavas是相當過時和Python綁定;並且沒有計劃在將來支持它們(例如,最後的幾個版本的Ubuntu將這個包從版本複製到版本而沒有任何改變)。

但還有另一個名爲GooCanvas的畫布庫,它使用Cairo在屏幕上繪製,似乎更新,具有Python綁定並由一些廣泛的項目(如Pitivi)使用。


相關問題