@jenya92

Получить GtkLabel по его ID?

Как я понял из мануалов, для изменения текста нужно воспользоваться функцией gtk_label_set_text. Но тут возникла проблема, ей нужно передать этот самый GtkLabel, как раз с эти у меня и возникли сложности.
В самой функции создания окна я с помощью builder подгружаю xml макет окна и прикручиваю к ему нужные обработчики кнопок, тут же без проблем могу и изменить текст этих самых кнопок и других полей.
Но как быть, если изменить текст нужно из функции, которая была вызвана этим обработчиком? Ведь тут уже нет тех переменных. Заново создавать builder, подгружать макет и всё остальное - как то звучит не слишком разумно для изменения одной единственной строчки, но как получить элемент по его ID другими путями - я найти информации к сожалению не могу.

P.S. Да, я слышал, что для С++ больше подходит gtkmm, но так получилось, что пришлось работать с gtk :)
  • Вопрос задан
  • 33 просмотра
Пригласить эксперта
Ответы на вопрос 1
TonyHunt
@TonyHunt
Part-time developer – full-time geek.
Используйте переменные для работы с данными. Переменную можно использовать почти в любом месте программы, подпрограмы.

Пример на 4х языках.
6053a84e9a5cc869182286.png

Пример с Gtk.Builder.
using Gtk;

public void on_button1_clicked (Button source) {
    source.label = "Thank you!";
}

public void on_button2_clicked (Button source) {
    source.label = "Thanks!";
}

int main (string[] args) {
    Gtk.init (ref args);

    try {
        // Если UI содержит кастомные виджеты,они должны хотя бы один раз проинициализированы
        // Type type = typeof(Foo.BarEntry);
        // assert(type != 0);
        var builder = new Builder ();
        builder.add_from_file ("sample.ui");
        builder.connect_signals (null);
        var window = builder.get_object ("window") as Window;
        window.show_all ();
        Gtk.main ();
    } catch (Error e) {
        stderr.printf ("Не получилось загрузить UI: %s\n", e.message);
        return 1;
    }

    return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы