Pixmap
またはPixbuf
であなたが望むことはできませんが、ここには既存のWidget
の上に落書きを実装する2つの方法があります。あなたはその中間のARGBイメージを持つようにしたい場合は、
from gtk import Window, Button, main
from math import pi
import cairo
w = Window()
b = Button("Draw on\ntop of me!")
def scribble_on(cr):
cr.set_source_rgb(0, 0, 0)
cr.rectangle(10, 10, 30, 30)
cr.fill()
cr.arc(50, 50, 10, 0, pi)
cr.stroke()
def expose_handler(widget, event):
cr = widget.window.cairo_create()
cr.rectangle(event.area.x, event.area.y,
event.area.width, event.area.height)
cr.clip()
scribble_on(cr)
return False
b.connect_after("expose_event", expose_handler)
w.add(b)
w.set_size_request(100, 100)
w.show_all()
main()
番目のオプション:最も明白な1はちょうどドローイベントをキャッチするとWidget
のDrawable
にストレートドロー、途中でノー保持された画像であります再描画が要求されるたびに更新する必要はありません。画像をImageSurface
に事前レンダリングする必要があります。ここでは一度だけ画像を描画することを、上記、expose_handler
の置き換えです:
import cairo
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 100, 100)
scribble_on(cairo.Context(surface))
def expose_image_handler(widget, event):
cr = widget.window.cairo_create()
cr.rectangle(event.area.x, event.area.y,
event.area.width, event.area.height)
cr.clip()
cr.set_source_surface(surface)
cr.paint()
これはあなたが探しているものの一種であるならば、私はあなたの本当のニーズを反映させるために、質問のタイトルを更新する推薦します: )。
も参照してください。http://stackoverflow.com/questions/3048148/alpha-blending-in-gtk – sdaau