6

我目前正在通过 PyGobject 学习 GTK+,需要像画布这样的东西。我已经搜索了文档并找到了两个似乎可以完成这项工作的小部件:GtkDrawingArea 和 GtkLayout。我需要一些基本函数,如 fillrect 或 drawline ...事实上,这些函数可以从 c 中获得,但我找不到如何从 python 中使用它们的说明。你能推荐一个处理他们的 python 等价物的教程或手册页吗?

如果您对如何获得类似于画布的东西有更好的了解,我们将不胜感激。我仍在学习,只要它可以嵌入到我的 Gtk 应用程序中,我就会满足于任何解决方案。

4

1 回答 1

12

为了说明我在评论中的观点,让我发布一个快速'n'dirty PyGtk 示例,该示例使用 aGtkDrawingArea创建画布并使用 cairo 在其中绘制

更正:你说的是PyGObject,即Gtk+3,所以例子如下(主要区别是没有expose事件,相反它是draw并且一个cairo上下文已经作为参数传递):

#!/usr/bin/python
from gi.repository import Gtk
import cairo
import math

def OnDraw(w, cr):
    cr.set_source_rgb(1, 1, 0)
    cr.arc(320,240,100, 0, 2*math.pi)
    cr.fill_preserve()

    cr.set_source_rgb(0, 0, 0)
    cr.stroke()

    cr.arc(280,210,20, 0, 2*math.pi)
    cr.arc(360,210,20, 0, 2*math.pi)
    cr.fill()

    cr.set_line_width(10)
    cr.set_line_cap(cairo.LINE_CAP_ROUND)
    cr.arc(320, 240, 60, math.pi/4, math.pi*3/4)
    cr.stroke()

w = Gtk.Window()
w.set_default_size(640, 480)
a = Gtk.DrawingArea()
w.add(a)

w.connect('destroy', Gtk.main_quit)
a.connect('draw', OnDraw)

w.show_all()

Gtk.main()
于 2011-12-22T22:20:06.313 回答