После добавления класса стиля "основная панель инструментов" в объект gtk.Builder, gtk.ToolButtons на панели инструментов не являются первичными

Я пытаюсь заставить свою панель инструментов выглядеть как стандартные панели инструментов на складе приложений Ubuntu, и она работает в некоторой степени, за исключением того, что на панели инструментов нет правильной тематики. Текст окрашен для панели инструментов по умолчанию, а при наведении кнопок - уродливый загар, вместо того, чтобы темнеет серый цвет, как в стандартных приложениях Ubuntu.

Другими словами, я получаю следующее:

Вместо этого:

(Мне не хватает репутации для отправки изображений напрямую)

Я использовал следующий метод для изменения стиля панели инструментов, поскольку у Glade нет возможности изменить ее самостоятельно:

self.bd = Gtk.Builder()
self.bd.add_from_file("builderfile.glade")
self.bd.connect_signals(self)
...
toolb = self.bd.get_object("toolbar")
toolb_style = toolb.get_style_context()
toolb_style.add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)

Это работает в той мере, в которой панель инструментов затемняется, но кнопки неправильно оформлены. Я попытался добавить кнопки на панель инструментов вручную после установки STYLE_CLASS_PRIMARY_TOOLBAR вместо использования Gtk.Builder(), но они также не были подходящим цветом.

Я предполагаю, что ручное создание панели инструментов и заполнение всей информации могут работать, но было бы неплохо иметь возможность использовать Glade для дизайна.

1 ответ

Я пишу этот ответ здесь, так как это решение, но оно не идеально, потому что оно не использует Glade, и это довольно грязно. Мне придется подождать, пока новая сборка Glade попадет в Ubuntu, поскольку, по-видимому, эта функция была добавлена ​​вверх по течению.

Решением, которое я в конечном итоге использовал, было просто сделать все создание панели инструментов в стандартном GTK и python, а затем добавить его в пустой Gtk.Box, определенный в Glade. Вот так:

bd = Gtk.Builder()
bd.add_from_file("gladefile.glade")
...
button1 = Gtk.ToolButton(stock_id=Gtk.STOCK_ADD, ...)
button2 = Gtk.ToolButton(...)
toolbar = Gtk.Toolbar()
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)
toolbar.insert(button1, 0)
toolbar.insert(button2, 1)
toolbar.show_all()
bd.get_object("toolbar_slot").pack_start(toolbar, False, True, 0)

licensed under cc by-sa 3.0 with attribution.