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