Есть ли способ добавить к существующему 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, которые ничего мне не дали.
Ответы
Ответ 1
Там хорошая libgnomecavas 2.3 документация по собственному C API, содержащая описание всех функций C для работы с gnomecanvas.
Связи Python не раскрывают весь описанный API в целом и ваши желаемые функции, в частности, и нет документации по связям с Python для холста gnome, все силы были отправлены для разработки связанных с Gnome3 вещей (вы можете исследовать их на live.gnome.org).
Другое дело, что gnomecavas довольно устарел и связывает Python; и в будущем нет планов поддерживать их (например, в нескольких версиях Ubuntu этот пакет просто копируется из версии в версию без каких-либо изменений).
Но есть еще одна холст-библиотека под названием GooCanvas, которая использует Cairo для рисования на экране и, кажется, более современна, имея PyGooCanvas Python и используется некоторыми широко распространенными проектами, такими как Pitivi.