Toolbar GTK+ 3

25 September 2012 · #c++, #gtk3, #python

Si vous créez des toolbars avec GTK+ 3 elle ne suivra pas le style des autres applications et ne s'affichera pas avec le fond cool peu plus sombre que le reste de la fenêtre.

La solution consiste à indiquer au programme la toolbar principale et GTK+ 3 s'occupera de tout.

Vous pouvez ajouter ces lignes dans la description de la toolbar directement dans le fichier .glade dans le noeud <object class="GtkToolbar"/> :

<class name="primary-toolbar"/>

UPDATE : Il est désormais possible d'indiquer la classe primary-toolbar depuis Glade.

Il y a aussi la classe "inline-toolbar" qui est utile si vous voulez mettre votre toolbar au milieu de la fenêtre.

Python

toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)

Exemple :

from gi.repository import Gtk

class CoolToolbar:
    def __init__(self):
        self.win = Gtk.Builder()
        self.win.add_from_file("toolbar.glade")
        self.toolbar = self.win.get_object("toolbar")
        self.toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)
        self.win.connect_signals(self)

    def quit(self, widget):
        Gtk.main_quit()

if __name__ == "__main__":
    CoolToolbar()
    Gtk.main()

C++

m_toolbar->get_style_context()->add_class(GTK_STYLE_CLASS_PRIMARY_TOOLBAR);

#include <gtkmm.h>
int main (int argc, char *argv[])
{
    Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.toolbar");
    Gtk::Window main;
    Gtk::Toolbar* m_toolbar;
    Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("toolbar.glade");
    builder->get_widget("toolbar", m_toolbar);
    m_toolbar->get_style_context()->add_class(GTK_STYLE_CLASS_PRIMARY_TOOLBAR);
    return app->run(main);
}