2015-01-06 3 views
1

내 gstreamer 응용 프로그램의 목적을 위해 나는 DrawingArea 위젯의 핸들을 제공하여 요소를 싱크하기 전에 간단한 로더에 대해 알아보아야합니다. 기본 아이디어는 Gtk.DrawingArea 내에있는 .gif 애니메이션을로드하는 것이지만 문서와 관련된 문제점을 실행합니다. 밖으로 약 PixbufAnimation와 나는 Gtk.Image 위젯과 함께 사용했지만 동일한 논리가 방법을 가지고 있지 않기 때문에 Gtk.DrawingArea에 대해 작동하지 않습니다. 그래서 내가 마지막 도움으로 여기 도움을 청하기 위해 무엇을해야할지 모르겠군요.Gtk3은 DrawingArea에서 PixbufAnimation을로드 중입니까?

이것은 내가 Gtk.Image했던 무엇인가

from gi.repository import Gdk,Gtk,GdkPixbuf 



class animatedWin(Gtk.Window): 
    def __init__(self): 
     Gtk.Window.__init__(self,width_request=640,height_request=480) 
     self.canvas=Gtk.Image() 
     self.add(self.canvas) 
     self.load_file() 
     self.connect("delete-event",self.Gtk.main_quit) 
    def load_file(self): 
     self.loader=GdkPixbuf.PixbufAnimation.new_from_file("loader.gif") 
     self.canvas.set_from_animation(self.loader) 


app=animatedWin() 
app.show_all() 

Gtk.main() 

이 DrawingArea과 같은 일을 달성 할 수있다? gtk3에있는 대부분의 위젯과 같은

답변

1

DrawingArea 그들에 그리기위한 카이로를 사용합니다. 카이로표면문맥으로 그립니다. 당신은 공공 표면 GDK .cairo_surface_create_from_pixbuf에 의해 표면pixbuf을 변환 할 수 있습니다 (Pixbuf의 pixbuf, INT 규모, 창? for_window)을. 그리고 Pixbuf 공개 에 의해 다시? Gdk.pixbuf_get_from_surface (표면 표면, int src_x, int src_y, int 폭, int 높이). 내 그리기 응용 프로그램에서

예제 코드를 (valadoc.org에서 가져온) (내가 쓰는 동안 나는 발라을 배우고, 그래서 최선의 구현을하지 않을 수 있습니다) :

private void on_scale (Gtk.Button button) { // on button press 
      var my_pixbuf = Gdk.pixbuf_get_from_surface (this.buf_surface, 0, 0, CANVAS_WIDTH, CANVAS_HEIGHT); 
      var tmp_surface = Gdk.cairo_surface_create_from_pixbuf (my_pixbuf, 2, null); 
      var ctx = this.ccc; //this.ccc is context of drawing surface 
      ctx.set_source_surface (tmp_surface, 0, 0); 
      ctx.paint(); 
      drawing_area.queue_draw(); // ask drawing_area to redraw, on redraw I have function/method that will paint drawing_area widget surface with drawing surface 
     } 

PS. 카이로에 대한 자세한 내용은 http://valadoc.org/#!api=cairo/Cairo을 참조하십시오. 내가보기에 카이로는 벡터 그래픽과 래스터를위한 pixbuf에 사용됩니다.

관련 문제