(这是我的第一篇文章,如果对不起,我做错了什么......)Gtk.DrawingArea空当连接到Gtk.Grid
我在瓦拉写一个程序,使用它可以设计一个教室。 我决定使用GUI(Vala与此完美集成), 和Cairo绘制教室图(GTK默认带有这个)。
我创建了一个“课堂”类(Gtk.DrawingArea的子类), 目前应该只是显示一个正方形:
public class Classroom : DrawingArea
{
private delegate void DrawMethod();
public Classroom()
{
this.draw.connect((widget, context) => {
return draw_class(widget, context, context.stroke);
});
}
bool draw_class(Widget widget, Context context, DrawMethod draw_method)
{
context.set_source_rgb(0, 0, 0);
context.set_line_width(8);
context.set_line_join (LineJoin.ROUND);
context.save();
context.new_path();
context.move_to(10, 10);
context.line_to(30, 10);
context.line_to(30, 30);
context.line_to(10, 30);
context.line_to(10, 10);
context.close_path();
draw_method(); // Actually draw the lines in the buffer to the widget
context.restore();
return true;
}
}
我也创建了一个类为我的应用程序:
public class SeatingPlanApp : Gtk.Application
{
protected override void activate()
{
var root = new Gtk.ApplicationWindow(this);
root.title = "Seating Plan";
root.set_border_width(12);
root.destroy.connect(Gtk.main_quit);
var grid = new Gtk.Grid();
root.add(grid);
/* Make our classroom area */
var classroom = new Classroom();
grid.attach(classroom, 0, 0, 1, 1);
//root.add(classroom);
root.show_all();
}
public SeatingPlanApp()
{
Object(application_id : "com.github.albert-tomanek.SeatingPlan");
}
}
这是我的主要功能:
int main (string[] args)
{
return new SeatingPlanApp().run(args);
}
我把我的classroom
小部件转换为Gtk.Grid
,这是我选择的布局小部件。 当我编译我的代码并运行它,我得到了一个空白窗口:
但是,如果我不使用Gtk.Grid
,只是加我classroom
使用root.add()
(我注释掉)时, classroom
小部件正确显示:
为什么使用Gtk.Grid加入时我的小工具显示不出来?
我能做些什么来解决这个问题?
欢迎来到SO,你的问题相当好。我做了一些编辑(内联图像并删除了“感谢”部分,这在这里被认为是不必要的)。 –
虽然有一件小事:我将所有代码复制到'.vala'文件并尝试编译,但是缺少'使用Gtk;'和'使用Cairo;'指令。下一次您应该考虑将所有必要指令的所有代码放在一个代码块中。 –
就我个人而言,我不喜欢''使用'指令,我只是使用它的完整名称空间来限定每个类型(GLib名称空间和我自己的类所在的名称空间除外)。 –