2015-09-27 4 views
2

У меня есть очень простое приложение PyGObject:Установить свойство стиля в PyGObject

from gi.repository import Gtk, Gdk 


class Window(Gtk.Window): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     self.set_border_width(5) 

     self.progress = Gtk.ProgressBar() 
     self.progress.set_fraction(0.5) 

     self.box = Gtk.Box() 
     self.box.pack_start(self.progress, True, True, 0) 

     self.add(self.box) 
     self.connect('delete-event', Gtk.main_quit) 
     self.show_all() 


win = Window() 
Gtk.main() 

Application

Я хочу иметь прогресс бар толще. Таким образом, я обнаружил, что есть свойство стиля для этого:

Name      Type Default Flags Short Description 
min-horizontal-bar-height int  6  r/w Minimum horizontal height of the progress bar 

Однако, мне кажется, не быть в состоянии установить свойство стиля в любом случае я пытался.

1) Я пытался использовать CSS:

style_provider = Gtk.CssProvider() 

css = b""" 
GtkProgressBar { 
    border-color: #000; 
    min-horizontal-bar-height: 10; 
} 
""" 

style_provider.load_from_data(css) 

Gtk.StyleContext.add_provider_for_screen(
    Gdk.Screen.get_default(), 
    style_provider, 
    Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION 
) 

Но я получил ошибку:

GLib.Error: gtk-css-provider-error-quark: <data>:4:37'min-horizontal-bar-height' is not a valid property name (3)

2) Я попытался set_style_property метод и все методы, описанные в this answer to similar question.

)

self.progress.set_property('min-horizontal-bar-height', 10)

TypeError: object of type 'GtkProgressBar' does not have property 'min-horizontal-bar-height'

б)

self.progress.set_style_property('min-horizontal-bar-height', 10)

AttributeError: 'ProgressBar' object has no attribute 'set_style_property'

с)

self.progress.min_horizontal_bar_height = 10

GLib.Error: gtk-css-provider-error-quark: <data>:4:37'min-horizontal-bar-height' is not a valid property name (3)

д)

self.progress.props.min_horizontal_bar_height = 10

AttributeError: 'gi._gobject.GProps' object has no attribute 'min_horizontal_bar_height'

е)

self.progress.set_min_horizontal_bar_height(10)

AttributeError: 'ProgressBar' object has no attribute 'set_min_horizontal_bar_height'

Любая идея, как получить более толстый прогресс бар?

ответ

5

В CSS, вы должны предварить имя свойства стиля с тиром и имя класса, к которому принадлежит свойству стиля:

GtkProgressBar { 
    -GtkProgressBar-min-horizontal-bar-height: 10px; 
} 

Они не предназначены быть установлены в коде, так нет соответствующего метода настройки для style_get_property().

+0

Удивительный! Есть ли хорошая документация для этого и вообще как использовать CSS для стилизации в GTK? Как, например, для отдельных виджетов во время выполнения, стилизация всего приложения и т. Д.? Мне было очень трудно найти что-то важное. – Fenikso

+1

[Вот документация для стилизации с GTK CSS] (https://developer.gnome.org/gtk3/stable/GtkCssProvider.HTML # GtkCssProvider.description). Это может быть лучше, но это довольно приличный обзор того, что вы можете сделать. – ptomato

+0

Прости, что? Где именно этот «префикс с именем класса и тире» * действительно * задокументирован? Во всяком случае, на странице со ссылками. – yPhil