2011-12-22 13 views
4

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

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

+1

良いと考えウィジェットはGtkDrawingAreaです。今はサンプルがありませんが、 'expose'イベントへの反応として、pycairoを使用して描画する必要があります。 – rodrigo

+0

つまり、GtkDrawingAreaは他のフレームワークで埋め込むことができるコンテナだけですか? GTK +にはキャンバスが含まれていますか? – lhk

+1

@rodrigo 'expose-event'シグナルは、[リファレンスマニュアル](http://developer.gnome.org/gtk3/3.3/ch25s02.html#id1413935)に従ってgtk3の' draw'シグナルに置き換えられました。 – jcollado

答えて

10

コメントで作られた私のポイントを説明するために、私はカイロ

CORRECTIONを使用して、その中にキャンバスや絵の具を作成するためにGtkDrawingAreaを使用quick'n'dirty私はPyGtkの例を投稿してみましょうPyGObject、それはのGtk + 3であるので、次のように例がある(主な違いは、代わりに、それはdrawであり、カイロコンテキストが既にパラメータとして渡され、どのexposeイベントがないことである):

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

さて、パイゲームの統合以上の利点は明らかです。カイロの文脈にイベントが提供されているという事実は、ただ美しいものです。私はこれを質問の答えとしてマークします。もちろん、これは完璧だと思われますが、私は別のアイデアに感謝します。 – lhk

+0

ありがとうございました – lhk

+0

ちょっと、ちょうど実際にコードを実行しました。クール! – lhk

関連する問題