如果可能的话,如何让Gtk.DrawingArea在Gtk.Fixed容器中可见?

时间:2017-07-16 04:15:33

标签: user-interface gtk3 cairo vala

仅当我将其作为窗口小部件添加到主窗口时,才会显示我的Gtk.DrawingArea。如果Window中有一个固定的容器,我将DrawingArea添加到固定容器中,我什么也看不见。但我知道调试时会调用绘制信号。

Gtk.DrawingArea drawing_area = new Gtk.DrawingArea ();
drawing_area.draw.connect ((context) => {
    context.set_source_rgba (1, 0, 0, 1);
    context.rectangle (25, 25, 100, 100);
    context.fill ();
    return true;
});

// Doesn't work, nothing is visible
fixed.put (drawing_area, 25, 25);

变量已修复的类型为 Gtk.Fixed 。 fixed是主窗口的唯一子窗口小部件。我必须提一下,如果我添加任何其他正常的Gtk Widget固定,如标签,所述标签是可见的。

如果我,而不是添加固定到我的主窗口,我将绘图区域添加为主窗口的唯一子项,如下面的代码所示,它显示

// Works, rectangle is visible
app_window.add (drawing_area);

app_window 的类型为 Gtk.ApplicationWindow

是否可以在成为固定的孩子时使其可见?

---------- ----------编辑

如果我为它设置了大小请求,Gtk.DrawingArea现在会出现在固定容器中。喜欢这个

Gtk.DrawingArea drawing_area = new Gtk.DrawingArea ();
drawing_area.width_request = 100;
drawing_area.height_request = 100;
drawing_area.draw.connect ((context) => {
    context.set_source_rgba (1, 0, 0, 1);
    context.rectangle (0, 0, drawing_area.get_allocated_width (), drawing_area.get_allocated_height ());
    context.fill ();
    return true;
});

我不知道这是否是正确的方法。虽然它有效。带有矩形的DrawingArea小部件现在显示在固定容器中。如果有推荐的方法,我会听取其他答案。

1 个答案:

答案 0 :(得分:3)

必须设置Gtk.DrawingArea小部件的大小请求。

Gtk.DrawingArea drawing_area = new Gtk.DrawingArea ();
drawing_area.width_request = 100;
drawing_area.height_request = 100;

drawing_area.draw.connect ((context) => {
    context.set_source_rgba (1, 0, 0, 1);
    context.rectangle (0, 0, drawing_area.get_allocated_width (), drawing_area.get_allocated_height ());
    context.fill ();
    return true;
});