【问题标题】:Gtk3 loading PixbufAnimation inside DrawingArea?Gtk3 在 DrawingArea 中加载 PixbufAnimation?
【发布时间】:2015-01-06 12:20:48
【问题描述】:

出于我的 gstreamer 应用程序的目的,在我将 DrawingArea 小部件的句柄用于接收元素之前,我对简单的加载器进行了讨论。基本的想法是在 Gtk.DrawingArea 中加载动画.gif,但我遇到了文档问题.我发现了 PixbufAnimation 并将它与 Gtk.Image 小部件一起使用,但相同的逻辑不适用于 Gtk.DrawingArea 并且因为它没有 add 方法我不知道该怎么做我不得已才来这里寻求帮助。

这就是我对 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 实现相同的目标?

【问题讨论】:

    标签: gtk gtk3 gdkpixbuf


    【解决方案1】:

    DrawingAreagtk3 中的大多数小部件一样,使用 cairo 在它们上绘图。 Cairo 使用 contextsurfaces 上绘制。您可以通过

    pixbuf 转换为 surface
    public Surface Gdk.cairo_surface_create_from_pixbuf (Pixbuf pixbuf, int scale, Window? for_window)
    

    然后返回

    public Pixbuf? Gdk.pixbuf_get_from_surface (Surface surface, int src_x, int src_y, int width, int height)
    

    (取自 valadoc.org)

    来自我的绘图应用程序的示例代码 sn-p(我在编写 Vala 时正在学习它,所以它可能不是最好的实现):

    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。在我看来,cairo 用于矢量图形,pixbuf 用于光栅。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多