#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 , который отвечает на вопрос хорошим примером.