Как украсить окно GTK, например. панель gnome?

#python #gtk #panel #window-decoration

#python #gtk #панель #оформление окна

Вопрос:

Я хотел бы создать приложение, похожее на панель, по внешнему виду очень похожее на панель gnome. Я хотел бы использовать GTK для этого (хотя я заглянул в Qt), предпочтительно используя Python.

Как я могу украсить окно таким образом, чтобы к нему применялся цвет / градиент / растровое изображение / svg?

Ответ №1:

Один из способов — использовать стили (в примере ниже используются строки встроенного стиля):

 #!/usr/bin/env python

import gtk

pixmap_rc = """
pixmap_path "/home/foo/images"
style "bar" {
    bg_pixmap[NORMAL] = "logo.svg"
} widget "*foo" style "bar"
"""

color_rc= """
style "bar" {
    bg[NORMAL] = "Hot Pink"
} widget "*foo" style "bar"
"""

def main ():
    window = gtk.Window()
    window.set_decorated(False)
    window.connect("destroy", gtk.main_quit)

    window.set_name("foo")
    gtk.rc_parse_string(color_rc)

    window.show_all()
    gtk.main()

if __name__ == "__main__":
    main ()
  

Однако настройка цветового градиента с помощью gtkrc, похоже, зависит от движка.

Редактировать: здесь приведен минималистичный пример gtkrc с растянутым фоновым изображением:

 pixmap_path "/home/foo/images"
style "bar" {
    engine "pixmap" {
        image {
            function = FLAT_BOX
            file     = "test.png"
            stretch  = TRUE
        }
    }
} widget "*foo" style "bar"
  

Комментарии:

1. Отлично, спасибо! 🙂 У вас есть какие-либо предложения по документации или руководству по стилям?

2. @Benjamin: проверьте это для начала: live.gnome.org/GnomeArt/Tutorials/GtkThemes

3. @Benjamin: стили в примере не представляют собой ничего особенного, это обычные стили gtkrc, которые подчиняются всем обычным правилам, т. Е. могут наследоваться, расширяться и т.д. Я внедрил их в виде встроенных строк, но вы могли бы сохранить их как внешний файл и вместо этого загрузить его с помощью gtk.rc_parse(filename) . И да, вы могли бы растянуть фоновое изображение, однако afair это невозможно сделать с помощью обычного gtk, для этого вам следует использовать движок (например, «pixmap»), взгляните на live.gnome.org/GnomeArt/Tutorials/GtkEngines/PixmapEngine (особенно функция FLAT_BOX). И, имхо, мы выходим за рамки этого 🙂

4. @Benjamin: смотрите Редактирование растягивания изображения bg с использованием движка pixmap

5. Я также добавляю этот Q amp; A в GTK , который отвечает на вопрос хорошим примером.