我正在尝试使用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()
在我看来这是一个相当低效的方法:每次指针移动时生成一个新对象;并且考虑到我从平板电脑获得亚像素精度,这通常是 。
我的问题是:有没有一种方法可以简单地附加到每个指针运动的现有bpath,就像我在这个库的C版本中一样?
在相关的说明中,是否有任何关于此API的文档,因为我已经完成了几个小时的谷歌搜索,但没有给我任何回报。
答案 0 :(得分:1)
有关本机C API的良好libgnomecavas 2.3文档,其中包含与gnomecanvas一起使用的所有C函数的说明。
Python绑定不会公开所有描述的API,特别是你想要的函数,并且没有关于gnome canvas的Python绑定的文档,所有的力都被发送来开发与Gnome3相关的东西(你可以在{ {3}})。
另一件事是gnomecavas已经过时了,Python绑定也是如此;并且没有计划在将来支持它们(例如,最后几个版本的Ubuntu将这个软件包从版本复制到版本而没有任何更改。)
但是还有另一个名为GooCanvas的画布库,它使用Cairo在屏幕上绘图,似乎更新,有live.gnome.org Python绑定,并被Pitivi等一些广泛的项目使用。