Как сделать кнопки разных цветов в Python GTK3 (используя gi)?

Моя последняя идея - создать глупое маленькое приложение на Python3, используя GTK3, с кнопками, отличными от серого цвета. Последние несколько дней я потратил на поиски того, как это сделать, и пока все, что я пробовал, провалилось. Не просто не удалось, но не удалосьsilently, без сообщений об ошибках, чтобы дать мне какую-либо подсказку относительно того, что происходит.

Это мое тестовое приложение:

from gi.repository import Gtk, Gdk

class ButtonWindow(Gtk.Window):

    def __init__(self):
        super().__init__(title="Button Test")
        self.set_border_width(10)
        hbox = Gtk.Box(spacing=10)
        self.add(hbox)
        hbox.set_homogeneous(False)

        # make the button
        button = Gtk.Button('Test Button')
        hbox.pack_start(button, True, True, 0)

        # try to change its colour ....

#        button.modify_base(Gtk.StateType.NORMAL, Gdk.color_parse('green'))
#        button.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0, 1, 0, 1))
#        button.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0x00ff00))
#        button.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse("green"))
#        button.modify_bg(Gtk.StateType.ACTIVE, Gdk.color_parse("green"))
#        button.modify_bg(Gtk.StateType.SELECTED, Gdk.color_parse("green"))

        # attempt to change the style ....

#        style = button.get_style().copy()
#        style.bg[Gtk.StateType.NORMAL] = Gdk.color_parse('green')
#        style.bg[Gtk.StateType.ACTIVE] = Gdk.color_parse('red')
#        style.bg[Gtk.StateType.SELECTED] = Gdk.color_parse('blue')
#        style.bg[Gtk.StateType.PRELIGHT] = Gdk.color_parse('black')
#        button.set_style(style)

        # ok, let's try changing the box ....

#        hbox.modify_base(Gtk.StateType.NORMAL, Gdk.color_parse('green'))
#        hbox.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0,1,0,1))
#        hbox.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0x00ff00ff))
#        hbox.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse('green'))

window = ButtonWindow()        
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

Я оставил свои неудачные попытки в качестве комментариев. Как отмечено выше, что касается приложения, оно, кажется, сработало, потому что ни один из вышеупомянутых вариантов не генерирует никаких сообщений об ошибках. Тем не мение,none из них, кажется, работают для меня, потому что кнопки остаются цвета несвежей посуды.

К вашему сведению, я использую Python 3.2.3 под Ubuntu 12.04 с python3-gi и python3-gi-cairo, установленными из стандартного репозитория.

Может кто-нибудь, пожалуйста, укажите мне в правильном направлении?

РЕДАКТИРОВАТЬ: Ниже приведен переработанный пример, основанный на ответе @ mike. Это работает, но есть некоторые проблемы, которые, возможно, будут устранены в некоторых последующих вопросах. Вопросы:

Why does background have to used on Ubuntu instead of background-color, and then only for the button? I still have some problems getting font styling to work, but at least now I have a working example to play with. Can different styles/colours be applied to different buttons, e.g. on the basis of the text or some other attribute?

Итак, код: -

from gi.repository import Gtk, Gdk

class ButtonWindow(Gtk.Window):

    def __init__(self):
        super().__init__(title="Button Test")
        self.set_border_width(10)

        hbox = Gtk.Box(spacing=10)
        self.add(hbox)
        hbox.set_homogeneous(False)

        # make the button
        button = Gtk.Button('Test Button')
        hbox.pack_start(button, True, True, 0)

# get the style from the css file and apply it
cssProvider = Gtk.CssProvider()
cssProvider.load_from_path('gtkStyledButtonTest.css')
screen = Gdk.Screen.get_default()
styleContext = Gtk.StyleContext()
styleContext.add_provider_for_screen(screen, cssProvider,
                                     Gtk.STYLE_PROVIDER_PRIORITY_USER)

window = ButtonWindow()        
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

и файл CSS выглядит следующим образом:

GtkWindow {
    background-color: #0000ff;
}

GtkButton {
    color: #ff0000;
    background: #00ff00;
}

Я надеюсь, что кто-то найдет это полезным.

Ответы на вопрос(3)

Ваш ответ на вопрос