Vala GtkButton.Clicked.Connect не вызывает функцию - PullRequest
0 голосов
/ 29 августа 2018

Я все еще пытаюсь выучить Вала, и у меня проблема с сигналами GtkButton.

Я хочу подключить функцию void refresh () к GtkButton. Когда кнопка нажата, функция должна быть вызвана и установить метку GtkLabel. Поэтому я пишу GtkButton.clicked.connect (this.function);. Это должно вызвать функцию, когда я нажимаю на кнопку, верно?

Моя функция очень проста для тестирования и должна изменять текст GtkLabel. Итак, я получаю void function () { GtkLabel.label = "New Text"; }.

Когда я тестирую эту маленькую программу, нажатие на кнопку ничего не делает или, по крайней мере, я ничего не вижу.

Чего мне не хватает?

Вот мой код:

namespace Zeiterfassunggtk {
    [GtkTemplate (ui = "/org/gnome/Zeiterfassunggtk/window.ui")]
    public class Window : Gtk.ApplicationWindow {
        [GtkChild]
        Gtk.Button refreshbutton;
        Gtk.Button menubuttonrefresh;

        void refresh () {
            label1.label = "Clicked";
        }

        public Window (Gtk.Application app) {
            Object (application: app);

            refreshbutton.clicked.connect (this.refresh);
            menubuttonrefresh.clicked.connect (this.refresh);

            this.show_all ();
        }
    }
}

Вы можете посмотреть полный код на github.com

1 Ответ

0 голосов
/ 30 августа 2018

Вам нужно [GtkChild] в каждом поле, если они есть в шаблоне. Прямо сейчас, menurefresh содержит ноль и не будет подключен ни к чему. label1 также имеет значение null, поэтому изменение его метки ничего не изменит.

Правильный код:

namespace Zeiterfassunggtk {
    [GtkTemplate (ui = "/org/gnome/Zeiterfassunggtk/window.ui")]
    public class Window : Gtk.ApplicationWindow {
        [GtkChild]
        Gtk.Button refreshbutton;
        [GtkChild]
        Gtk.Button menubuttonrefresh;
        [GtkChild]
        Gtk.Label label1;

        void refresh () {
            label1.label = "Clicked";
        }

        public Window (Gtk.Application app) {
            Object (application: app);

            refreshbutton.clicked.connect (this.refresh);
            menubuttonrefresh.clicked.connect (this.refresh);

            this.show_all ();
        }
    }
}
...