Jak zrobić przyciski w różnych kolorach w Pythonie GTK3 (używając gi)?

Moim najnowszym head-scratcherem jest zbudowanie głupiej małej aplikacji w Pythonie3 za pomocą GTK3, z kolorami innymi niż szaro-mgliste na przyciskach. Ostatnie kilka dni spędziłem na szukaniu hasła, a jak dotąd wszystko, co próbowałem, zawiodło. Nie tylko się nie udało, ale się nie udałobezgłośnie, bez komunikatów o błędach, aby dać mi jakąś wskazówkę co do tego, co się dzieje.

To jest moja aplikacja testowa:

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()

Pozostawiłem moje nieudane próby jako komentarze. Jak wspomniano powyżej, jeśli chodzi o aplikację, wydaje się, że zadziałała, ponieważ żadna z powyższych odmian nie generuje żadnych komunikatów o błędach. Jednak,Żaden Wydaje mi się, że działają na mnie, ponieważ guziki pozostają w kolorze stęchłej wody.

FYI Używam Pythona 3.2.3 w Ubuntu 12.04 z python3-gi i python3-gi-cairo zainstalowanymi ze standardowego repozytorium.

Czy ktoś może wskazać mi właściwy kierunek?

EDYCJA: Poniżej znajduje się przerobiony przykład oparty na odpowiedzi @ mike. To działa, ale są z tym pewne problemy, które mogą być rozwiązane w następnych pytaniach. Problemy są następujące:

Dlaczegobackground trzeba używać w Ubuntu zamiastbackground-color, a potem tylko dla przycisku?Nadal mam problemy z działaniem stylizacji czcionek, ale przynajmniej teraz mam przykład do pracy.Czy różne style / kolory mogą być stosowane do różnych przycisków, np. na podstawie tekstu lub innego atrybutu?

Tak więc kod: -

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()

a plik css wygląda tak: -

GtkWindow {
    background-color: #0000ff;
}

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

Mam nadzieję, że ktoś uzna to za przydatne.

questionAnswers(3)

yourAnswerToTheQuestion