Добавление элемента после нажатия на кнопку - PullRequest
0 голосов
/ 19 декабря 2018

Я пытался изучить 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;
}

1 Ответ

0 голосов
/ 19 декабря 2018

По умолчанию 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);
});

теперь работает.

...