2017-08-22 2 views
2

Die Standardhintergrundfarbe scheint blau zu sein (aus dem Adwaita-Thema), selbst wenn ich den Nachrichtentyp auf Warnung eingestellt habe. Ich bevorzuge CSS.Wie ändere ich die Hintergrundfarbe einer Gtk.InfoBar in Gelb?

example.py:

# coding=utf-8 

import gi 
gi.require_version("Gtk", "3.0") 
from gi.repository import Gtk 

w = Gtk.Window() 
ib = Gtk.InfoBar() 

w.add(ib) 
w.connect("delete-event", Gtk.main_quit) 

provider = Gtk.CssProvider() 
provider.load_from_path("style.css") 

w.get_style_context()\ 
    .add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) 

w.show_all() 
Gtk.main() 

style.css:

infobar { 
    background-color: yellow; 
} 

Screenshot:

Screenshot with the problem

Ich benutze Python 2.7.13 und GTK + 3.22 unter Windows 10 mit allen Updates installiert und über MSYS2 mit allen Updates mit pacman -Syyu installiert.

Antwort

1

Vom Python Gtk API:

Gtk.InfoBar hat einen einzigen CSS-Knoten mit dem Namen Infobar. Der Knoten kann je nach Nachrichtentyp eine der Stilklassen .info, .warning, .error oder .question, erhalten.

standardmäßig Typ Gtk.InfoBar Nachricht ist Gtk.MessageType.INFO und Ihre style.css Datei sollte sein, zB .:

infobar.info { 
    background-color: yellow; 
} 

Auf diese Weise können mehr spezifisch für den Nachrichtentyp sein kann Ihre Einstellung ist aber infobar von selbst wird auch funktionieren. Der Vorteil ist, dass Sie benutzerdefinierte Einstellungen für jeden Nachrichtentyp mit infobar.<messagetype> haben können.

EDIT:

Änderung der Widget, dass die CSS-Klasse auf die Gtk.InfoBar Instanz erhalten:

ib.get_style_context()\ 
    .add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) 

EDIT 2:

Um einen CssProvider (StyleProvider hinzufügen) Als Ganzes für die Anwendung haben Sie die Gdk.Screen Klassenmethode Gdk.Screen.add_provider_for_screen (mehr info here)

Ihren Code ändern diese Änderungen widerzuspiegeln, müssen Sie:

# coding=utf-8 

import gi 
gi.require_version("Gtk", "3.0") 
from gi.repository import Gtk, Gdk 

w = Gtk.Window() 
ib = Gtk.InfoBar() 

w.add(ib) 
w.connect("delete-event", Gtk.main_quit) 

provider = Gtk.CssProvider() 
provider.load_from_path("style.css") 

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

w.show_all() 
Gtk.main() 
+0

ich diesen tehnique getestet. Es funktioniert nicht. – silviubogan

+0

@silviubogan Sorry, ich habe vergessen, das Widget zu setzen. Überprüfen Sie die Bearbeitung. –

+0

Es funktioniert! Aber ich möchte eine globale CSS-Datei für mein gesamtes Programm haben. Wie kann ich das tun, wenn die von Ihnen erklärte Aufgabe ist, für jedes Widget eine ganze CSS-Datei zu stylen? – silviubogan

Verwandte Themen