Как изменить вкладки Gtk.Notebook

Есть ли способ изменить вкладку Gtk.Notebook по умолчанию? Я хочу реализовать кнопку плоской вкладки

1
задан 6 January 2014 в 18:04

1 ответ

Вот минимальный тестовый сценарий, в котором ноутбук разрабатывается с помощью CSS.

from gi.repository import Gtk, Gdk

CSS = """
.myNotebook tab {
    background-color: red;
}
.myNotebook tab:active {
    background-color: blue;
}

"""

class TestWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.resize(600, 400)
        self.connect("delete-event", Gtk.main_quit)

        cssprovider = Gtk.CssProvider()
        cssprovider.load_from_data(CSS)
        screen = Gdk.Screen.get_default()
        stylecontext = Gtk.StyleContext()
        stylecontext.add_provider_for_screen(screen, cssprovider,
                                             Gtk.STYLE_PROVIDER_PRIORITY_USER)

        nb = Gtk.Notebook()
        context = nb.get_style_context()
        context.add_class("myNotebook")
        for x in range(1, 5):
            label = Gtk.Label("page %s" % x)
            nb.append_page(label, None)

        self.add(nb)
        self.show_all()

if __name__ == "__main__":
    test = TestWindow()
    Gtk.main()

Это только меняет цвет фона вкладок, но больше должно быть возможно. Вот стиль для темы Ubuntu по умолчанию, вы, вероятно, ищете border-image.

.notebook tab {
    background-image: none;
    background-color: transparent;
    border-style: solid;
    border-image: -gtk-gradient (linear, left top, left bottom,
                                 from (alpha (shade (@bg_color, 0.9), 0.0)),
                                 to (shade (@bg_color, 0.9))) 1;
    border-image-width: 0 1px;
    border-color: transparent;
    border-width: 0;
    box-shadow: none;
    /*color: shade (@fg_color, 1.2);*/
}

.notebook tab:active {
    border-color: shade (@bg_color, 0.82);
    border-style: solid;
    border-width: 1px;
    background-color: shade (@bg_color, 1.02);
    background-image: none;
    /*box-shadow: inset 0 1px shade (@bg_color, 1.1);*/

    color: @fg_color;
}

Вместо классов CSS вы также можете использовать имя виджета GTK, чтобы применить собственный стиль ко всем виджетам. Удалите context.add_class("myNotebook") и используйте следующий CSS:

CSS = """
GtkNotebook tab {
    background-color: red;
}
GtkNotebook tab:active {
    background-color: blue;
}

"""

Или работайте с произвольными именами. Добавьте имя к вашему виджету: nb.set_name("myNotebook") И CSS:

CSS = """
GtkNotebook#myNotebook tab {
    background-color: red;
}
GtkNotebook#myNotebook tab:active {
    background-color: blue;
}

"""
0
ответ дан 6 January 2014 в 18:04

Другие вопросы по тегам:

Похожие вопросы: