2012-07-09 4 views
12

파이썬과 gnomecanvas를 사용하여 간단한 그리기 응용 프로그램을 만들려고합니다. 안타깝게도 gnomecanvas에 대한 Python 바인딩에 대한 문서는 전혀 없습니다. 따라서 코드 샘플을 사용하여 C 바인딩을 추측하려고합니다.파이썬에서 기존의 그놈 캔버스 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에서 수 시간 동안 Google 검색 결과를 제공하지 않아이 API에 대한 문서가 있습니까?

답변

1

네이티브 C API에 대해 libgnomecavas 2.3 설명서가 제공되며 여기에는 gnomecanvas에서 작동하는 모든 C 함수에 대한 설명이 들어 있습니다.

파이썬 바인딩은 설명 된 API를 모두 공개하지 않으며 특히 원하는 기능을 노출하지 않으며 gnome 캔버스의 파이썬 바인딩에 대한 문서가 없으므로 Gnome3 관련 작업을 개발하기 위해 모든 권한이 전송되었습니다 (live.gnome.org).

또 다른 것은 gnomecavas가 상당히 구식이며 Python 바인딩이기도하다는 것입니다. 앞으로 우분투를 지원할 계획은 없습니다 (예 : 우분투의 마지막 버전은이 패키지가 변경없이 버전간에 복사됩니다).

그러나 GooCanvas라는 또 다른 캔버스 라이브러리에는 카이로를 사용하여 화면에 그려지고 더 최신 버전 인 것 같습니다. PyGooCanvas Python 바인딩이 있고 Pitivi와 같은 널리 사용되는 프로젝트에서 사용됩니다.


관련 문제