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