from gi.repository import Gtk, Gdk

provider = Gtk.CssProvider()
provider.load_from_data('''
.button .image {
    color: blue;
}

.button1:hover .image {
    color: red;
}

.button2 .image:hover {
    color: red;
}
''')
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), provider,
    Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

w = Gtk.Window()
g = Gtk.Grid()
b1 = Gtk.Button(label='I should turn red', always_show_image=True,
    image=Gtk.Image.new_from_icon_name('list-add-symbolic', Gtk.IconSize.BUTTON))
b2 = Gtk.Button(label='I do turn red', always_show_image=True,
    image=Gtk.Image.new_from_icon_name('list-add-symbolic', Gtk.IconSize.BUTTON))
b1.get_style_context().add_class('button1')
b2.get_style_context().add_class('button2')
for button in (b1, b2):
    button.props.image.get_style_context().add_class('image')
    g.add(button)
w.add(g)

w.connect('destroy', Gtk.main_quit)
b2.connect('state-flags-changed',
    lambda button, prev_flags:
        button.props.image.set_state_flags(button.get_state_flags(), True))

w.show_all()
Gtk.main()
