2012-07-09 7 views
12

Próbuję wykonać prostą aplikację do rysowania za pomocą Python i gnomecanvas. Niestety, wydaje się, że nie ma dokumentacji dla powiązań Python dla gnomecanvas w ogóle. W związku z tym jestem nieudolny używając próbek kodu i próbując odgadnąć z wiązań C.Czy istnieje sposób dołączenia do istniejącej ścieżki bn na kanale gnoma w Pythonie?

Jak to jest, mam kod pracę utrzymując listę aktualnych punktów w udarze i generowania nowego obiektu ścieżki z tej listy w każdej nowej pozycji:

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

Wydaje mi się dość nieefektywna metoda: generowanie nowego obiektu za każdym razem, gdy porusza się wskaźnik; i biorąc pod uwagę, że uzyskuję subpikselową precyzję z mojego tabletu, to jest to często raczej często.

Moje pytanie brzmi: czy istnieje sposób, dzięki któremu mogę po prostu dołączyć do istniejącej ścieżki bpath w każdym ruchu wskaźnika, tak jak w wersji C tej biblioteki?

Na pokrewnej notatce, czy jest jakaś dokumentacja dla tego interfejsu API, ponieważ wykonałem wiele godzin pracy w Google, które nie dały mi nic w zamian.

Odpowiedz

1

Istnieje dobra dokumentacja libgnomecavas 2.3 natywnego API C, która zawiera opis wszystkich funkcji C do pracy z gnomecanvami.

Wiązania w języku Python nie ujawniają ogólnie wszystkich opisanych API, a w szczególności pożądanych funkcji, a nie ma dokumentacji dotyczącej powiązań Pythona dla gnome canvas, wszystkie siły zostały wysłane w celu opracowania elementów związanych z Gnome3 (można je przejrzeć na stronie live.gnome.org).

Inną sprawą jest to, że gnomecavas jest dość przestarzały i wiąże się z Python; i nie ma planów na ich wsparcie w przyszłości (np. w ostatnich kilku wersjach Ubuntu ten pakiet jest właśnie kopiowany z wersji do wersji bez żadnych zmian).

Ale istnieje kolejna płócienna biblioteka o nazwie GooCanvas, która używa Kairu do rysowania na ekranie i wydaje się być bardziej aktualna, posiadająca wiązania Python i używana przez niektóre szeroko rozpowszechnione projekty, takie jak Pitivi.


Powiązane problemy