Pixmap
또는 Pixbuf
으로 원하는 것을 수행 할 수 있다고 생각하지 않지만 기존 Widget
위에 낙서를 구현하는 두 가지 전략이 있습니다. 가장 눈에 띄는 사람은 바로 추첨 이벤트를 잡으려고하고에 바로 그릴 수있는 중간에 어떤 유지 이미지로 Widget
의 Drawable
:
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()
두 번째 옵션, 당신은 중간 ARGB 이미지를 갖고 싶어 그 다시 그리기가 요청 될 때마다 업데이트 할 필요가 없으며 이미지를 ImageSurface
으로 사전 렌더링하는 것이 좋습니다. 이것이 당신이 찾고있는 물건의 종류 인 경우 나는 당신의 진짜 필요를 반영하기 위해 질문의 제목을 업데이트하는 것이 좋습니다 것,
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()
: 여기에 위의 expose_handler
, 대체는 한 번 이미지를 그리는 것이있다 :).
참조 http://stackoverflow.com/questions/3048148/alpha-blending-in-gtk – sdaau