Есть ли способ добавить bpath к существующему холсту gnome в Python?

Я пытаюсь создать простое приложение для рисования, используя Python и gnomecanvas. К сожалению, похоже, что нет никакой документации по привязкам Python для gnomecanvas. Таким образом, я возился с примерами кода и пытался угадать из привязок 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()

. Мне кажется, что это довольно неэффективный метод :, генерирующий новый объект каждый раз, когда указатель перемещается; и, учитывая, что я получаю субпиксельную точность от своего планшета, это довольно часто .

У меня вопрос: :есть ли способ, с помощью которого я могу просто добавить существующий bpath при каждом движении указателя, как в C-версии этой библиотеки?

В связи с этим, есть ли какая-либо документация для этого API, потому что я провел несколько часов в Google, которые ничего не дали мне взамен.

12
задан Chris Okyen 13 August 2012 в 19:37
поделиться