12

我正在尝试使用 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 的文档,因为我已经做了几个小时的谷歌搜索,但没有给我任何回报。

4

1 回答 1

1

本机 C API 上有很好的libgnomecavas 2.3文档,其中包含所有 C 函数与 gnomecanvas 一起使用的描述。

Python 绑定通常不会公开所有描述的 API,尤其是您想要的功能,并且没有关于 gnome canvas 的 Python 绑定的文档,所有力量都被派去开发与 Gnome3 相关的东西(您可以在live.gnome 上探索它。组织)。

另一件事是 gnomecavas 已经过时了,Python 绑定也是如此。并且没有计划在未来支持它们(例如,最近几个版本的 Ubuntu 有这个包只是从一个版本复制到另一个版本,没有任何更改)。

但是还有另一个名为 GooCanvas 的画布库,它使用 Cairo 在屏幕上绘图,并且似乎是最新的,具有PyGooCanvas Python 绑定并被一些广泛的项目使用,例如 Pitivi。


于 2012-08-23T15:05:12.973 回答