Python GTK+ 画布
我现在正在通过PyGobject学习GTK+,需要一个类似画布的东西。我已经查过文档,发现有两个小部件看起来可以满足我的需求:GtkDrawingArea和GtkLayout。我需要一些基本的功能,比如填充矩形或画线……实际上这些功能在C语言中是可以用的,但我找不到如何在Python中使用它们的说明。你能推荐一个教程或手册,讲讲它们在Python中的用法吗?
如果你有更好的主意,能让我得到类似画布的东西,任何建议都非常感谢。我还在学习,只要能嵌入到我的Gtk应用程序中,我对任何解决方案都很满意。
1 个回答
13
为了更好地说明我在评论中提到的观点,我来分享一个简单的 PyGtk 示例。这个示例使用了一个 GtkDrawingArea
来创建一个画布,并通过 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()