6

私は現在、PyGobject を介して GTK+ を学習しており、キャンバスのようなものが必要です。私はすでにドキュメントを検索し、GtkDrawingArea と GtkLayout という仕事をする可能性が高いと思われる 2 つのウィジェットを見つけました。fillrect や drawline などのいくつかの基本的な関数が必要です...実際、これらの関数は c から利用できますが、python からそれらを使用する方法を見つけることができませんでした。同等の Python を扱うチュートリアルまたはマンページをお勧めできますか?

キャンバスに似たものを取得する方法についてより良いアイデアがあれば、すべてのヒントをいただければ幸いです。私はまだ学んでおり、Gtk アプリケーションに組み込むことができる限り、どのようなソリューションにも満足しています。

4

1 に答える 1

12

GtkDrawingAreaコメントで指摘した点を説明するために、a を使用してキャンバスを作成し、cairo を使用してペイントするPyGtk の簡単な例を投稿させてください。

訂正: 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 に答える