12

Python と gnomecanvas を使用して簡単な描画アプリケーションを作成しようとしています。残念ながら、gnomecanvas の Python バインディングに関するドキュメントはまったくないようです。したがって、私はコード サンプルを使用して、C バインディングから推測しようとしています。

現状では、ストローク内の現在のポイントのリストを保持し、新しいアイテムごとにこのリストから新しいパス オブジェクトを生成することによって、コードが機能しています。

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 に簡単に追加できる方法はありますか?

関連する注意事項として、この API に関するドキュメントはありますか?何時間もグーグルで検索しましたが、見返りはありませんでした。

4

1 に答える 1

1

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

Python バインディングは、一般的に説明されているすべての API を公開するわけではありません。特に、必要な機能は公開されません。また、gnome キャンバスの Python バインディングに関するドキュメントはありません。すべての力は、Gnome3 関連のものを開発するために送られました ( live.gnome.組織)。

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

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


于 2012-08-23T15:05:12.973 に答える