Есть такая особенность в GTK, что если положить с помощью gtk_expander_set_label_widget в GtkExpander активируемый виджет вроде GtkCheckButton или GtkSwitch, то активируемый виджет вроде как работает (можно кликнуть по нему и получить статус "active"), но отрисовывается не правильно. Например, в случае GtkCheckButton не рисуется галочка, даже если кнопка в активном состоянии. В принципе даже из названия "label_widget" видно, что разработчиками не закладывалось, что кто-то будет туда класть какой-то активный элемент, максимум GtkLabel или картинку. Однако есть способ заставить активные виджеты работать, если виджет класть в Expander уже после того, как Expander сформирован.
Ниже пример на питоне. Отмечу, что обязательно нужно класть в label_widget GtkBox, а уже в него складывать свои активные виджеты. Функцию hacked_idle можно объявить один раз и использовать для всех Expander'ов.
Ниже пример на питоне. Отмечу, что обязательно нужно класть в label_widget GtkBox, а уже в него складывать свои активные виджеты. Функцию hacked_idle можно объявить один раз и использовать для всех Expander'ов.
import gi, sys from gi.repository import Gtk, GLib def hacked_idle(expander): hbox = expander.get_label_widget() expander.set_label_widget(None) expander.set_label_widget(hbox) return False def expander_realize_cb(widget): GLib.idle_add(hacked_idle, widget) return False class Test: def __init__(self): window = Gtk.Window() window.set_default_size(640, 480) window.connect_after("destroy", self.destroy) exp = Gtk.Expander() exp.connect("realize", expander_realize_cb) exp.set_expanded(True) window.add(exp) hbox = Gtk.Box(Gtk.Orientation.HORIZONTAL, 5) exp.set_label_widget(hbox) check = Gtk.CheckButton() check.set_label("Hi, There!!"); hbox.add(check) switch = Gtk.Switch() hbox.add(switch) big_label = Gtk.Label() big_label.set_markup("<big>Hello, World!!!</big>") exp.add(big_label) window.show_all() def destroy(window, self): Gtk.main_quit() def main(): app = Test() Gtk.main() if __name__ == "__main__": sys.exit(main())
Ключевые слова: Gtk, GtkCheckButton, GtkExpander
Подписаться на:
Сообщения (Atom)