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