Скрытие перехода в Gtk

Это продолжение предыдущего вопроса о Виджет Gtk.SearchEntry.

В этом вопросе мне удается открыть виджет ввода при нажатии на значок, теперь я хочу, чтобы виджет исчез после того, как он потерял фокус.

Подход, используемый сейчас, заключался в следующем:

    search_entry.icon_release.connect (hide_search)

И определил hide_search как:

def hide_search()
    search_button_revealer.set_reveal = true
    search_entry_revealer.set_reveal = false
    show_all()

Однако это не решает проблему. Весь код можно найти здесь.


person lf_araujo    schedule 24.12.2016    source источник


Ответы (1)


Похоже, вы ловите неправильный сигнал. Тот, который у вас есть, предназначен для нажатия кнопки внутри записи, а тот, который вам нужен, - focus_out_event, это код vala, который делает то, что вы хотите :)

search_entry.focus_out_event.connect (() => {
    // Make sure the entry is empty so you don't 
    // close it out on the user
    if (search_entry.get_text () == "") {
        hide_search ();
    }

    return false;
});
person user7484414    schedule 28.01.2017
comment
Я продолжаю получать: Cannot convert from Application.hide_search' to Gtk.Widget.focus_out_event' search_entry.focus_out_event.connect (hide_search) с этим решением. Я обновил код в ссылке pastebin из вопроса. - person lf_araujo; 29.01.2017
comment
Обратный вызов требует аргумента Gdk.EventFocus и должен возвращать bool. См. valadoc.org/gtk+-3.0/Gtk.Widget.focus_out_event.html Для Genie я /думаю/ синтаксис def hide_search(e: Gdk.Event) : bool - person nemequ; 30.01.2017