Добавление элемента после нажатия на кнопку
Я пытался выучить Vala, запрограммировав очень простое приложение, и наткнулся на проблему, которую не смог решить самостоятельно.
Программа показывает просто кнопку Init
и по нажатию должен добавить кнопку X
к сетке контейнера. К сожалению, содержимое контейнера 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;
}
1 ответ
Решение
С помощью GTK+ Toolkit виджеты скрыты по умолчанию. Хотя у вас есть 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);
});
в настоящее время работает.