Есть такая особенность в 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)