我试图通过编写一个非常简单的应用程序来学习Vala,但偶然发现了一个我无法自行解决的问题。
该程序仅显示一个按钮Init
,在单击时应将一个按钮X
添加到Grid容器。不幸的是,Grid容器的内容仍然为空,我不知道为什么。
更令人困惑的是,在构造函数中添加Button可以按预期工作。
所以我在这里做错了吗?
using Gtk;
class MyWindow: Gtk.Window {
private Gtk.Grid mGrid;
public MyWindow() {
var init=new Gtk.Button.with_label("Init");
init.clicked.connect((t)=>{
stdout.printf("Init");
mGrid.attach(new Gtk.Button.with_label("X"),0,0,1,1);
});
var box=new Gtk.Box(VERTICAL,0);
mGrid=new Gtk.Grid();
//mGrid.attach(new Gtk.Button.with_label("X"),0,0,1,1);
box.add(init);
box.add(mGrid);
this.add(box);
this.show_all();
}
}
int main(string[] args) {
Gtk.init(ref args);
new MyWindow();
Gtk.main();
return 0;
}
答案 0 :(得分:3)
使用GTK +工具箱时,默认情况下隐藏窗口小部件。尽管您拥有this.show_all ()
,但此按钮随后创建并被隐藏。将回调从以下位置更改:
init.clicked.connect((t)=>{
stdout.printf("Init");
mGrid.attach(new Gtk.Button.with_label("X"),0,0,1,1);
});
类似于:
init.clicked.connect((t)=>{
stdout.printf("Init");
var my_button = new Gtk.Button.with_label("X");
my_button.show_all ();
mGrid.attach(my_button,0,0,1,1);
});
现在有效。