2012-07-09 5 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() 

これがあることを私には思えますむしろ非効率的な方法:ポインタが動くたびに新しいオブジェクトを生成する。私はタブレットからサブピクセルの精度を得ていると考えていますが、これはで、たびたびです。

私の質問は、このライブラリのCバージョンのように、各ポインタモーションの既存のbpathに単純に追加できる方法はありますか?

関連するノートでは、私は何も返されなかったGoogle検索を何時間も行っているため、このAPIのドキュメントはありますか?

答えて

1

ネイティブC APIには、libgnomecavas 2.3のドキュメントがあり、gnomecanvasで動作するすべてのC関数の説明が含まれています。

Pythonバインディングでは、説明されているすべてのAPIが一般的に公開されておらず、特に必要な機能があり、Pythonバインディングに関するドキュメントがGNOMEカンバスにはありません。 live.gnome.org)。

もう1つのことは、gnomecavasはかなり古く、Pythonバインディングでもあります。将来的にそれらをサポートする予定はありません(例えば、Ubuntuの最後のいくつかのバージョンでは、このパッケージは何の変更もなくバージョン間でコピーされています)。

しかし、GooCanvasと呼ばれる別のキャンバスライブラリでは、カイロを使って画面に描画し、より最新のように見えます。PyGooCanvas Pythonバインディングがあり、Pitiviなどの広範なプロジェクトで使用されています。


関連する問題