Подтвердить что ты не робот

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

Я пытаюсь создать простое приложение рисования с использованием Python и gnomecanvas. К сожалению, похоже, нет документации для привязок Python для gnomecanvas. Таким образом, я общаюсь с использованием образцов кода и пытаюсь угадать из привязок С.

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

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, потому что я много часов проработал в Googling, которые ничего мне не дали.

4b9b3361

Ответ 1

Там хорошая libgnomecavas 2.3 документация по собственному C API, содержащая описание всех функций C для работы с gnomecanvas.

Связи Python не раскрывают весь описанный API в целом и ваши желаемые функции, в частности, и нет документации по связям с Python для холста gnome, все силы были отправлены для разработки связанных с Gnome3 вещей (вы можете исследовать их на live.gnome.org).

Другое дело, что gnomecavas довольно устарел и связывает Python; и в будущем нет планов поддерживать их (например, в нескольких версиях Ubuntu этот пакет просто копируется из версии в версию без каких-либо изменений).

Но есть еще одна холст-библиотека под названием GooCanvas, которая использует Cairo для рисования на экране и, кажется, более современна, имея PyGooCanvas Python и используется некоторыми широко распространенными проектами, такими как Pitivi.