我正在尝试使用 Python 和 gnomecanvas 制作一个简单的绘图应用程序。遗憾的是,似乎没有任何关于 gnomecanvas 的 Python 绑定的文档。因此,我笨手笨脚地使用代码示例并试图从 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()
这在我看来是一种相当低效的方法:每次指针移动时都生成一个新对象;考虑到我从平板电脑获得亚像素精度,这是相当常见的。
我的问题是:有没有一种方法可以像在这个库的 C 版本中那样简单地附加到每个指针运动的现有 bpath 上?
在相关的说明中,是否有任何关于此 API 的文档,因为我已经做了几个小时的谷歌搜索,但没有给我任何回报。