Python GTK + Canvas - PullRequest
       8

Python GTK + Canvas

5 голосов
/ 22 декабря 2011

В настоящее время я изучаю GTK + через PyGobject и мне нужно что-то вроде холста. Я уже искал документы и нашел два виджета, которые, вероятно, справятся с этой задачей: GtkDrawingArea и GtkLayout. Мне нужно несколько основных функций, таких как fillrect или drawline ... На самом деле эти функции доступны из c, но я не смог найти направления, как их использовать из python. Можете ли вы порекомендовать учебник или справочную страницу, в которых рассматриваются их эквиваленты в Python?

Если у вас есть лучшая идея, как получить что-то похожее на холст, каждый совет будет оценен. Я все еще учусь и до тех пор, пока он может быть встроен в мое приложение Gtk, я буду доволен любым решением.

1 Ответ

11 голосов
/ 23 декабря 2011

Чтобы проиллюстрировать мои замечания, высказанные в комментариях, позвольте мне опубликовать быстрый и непростой пример PyGtk, который использует GtkDrawingArea для создания холста и рисует в нем, используя cairo

ИСПРАВЛЕНИЕ : вы сказали, что PyGObject, то есть Gtk + 3, поэтому пример таков (основное отличие состоит в том, что нет события expose, вместо этого draw и Каир контекст уже передан как параметр):

#!/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()
...