2016-07-21 3 views
1

Ich möchte eine glade-Datei laden und die Farbe aller Toggle-Buttons ändern (Klasse "GtkToggleButton", ich möchte die "gedrückte" Farbe ändern) Der Toggle-Button ist eines von vielen Sub-Sub-Elementen in der Glade-Datei. Hier ist der C-Code-snipped Ich verwende die CSS- und die .glade zu laden:Erhalte keine css in gtk3 mit glade zum arbeiten

void on_minute_pressed(GtkWidget *button) 
{ 
    GtkCssProvider *cssProvider = gtk_css_provider_new(); 
    gtk_css_provider_load_from_path(cssProvider,"./test.css",NULL); 
    GtkBuilder *builder = gtk_builder_new(); 
    gtk_builder_add_from_file (builder, "minute_dialog.glade", NULL); 
    GtkWidget  *window= GTK_WIDGET(gtk_builder_get_object(builder, "MinuteWizard")); 
    gtk_window_set_transient_for (window,main_window); 
    gtk_style_context_add_provider(gtk_widget_get_style_context(window),cssProvider,GTK_STYLE_PROVIDER_PRIORITY_USER); 
    gtk_builder_connect_signals(builder, NULL); 

    gtk_widget_show(window); 
    g_object_unref(builder); 
} 

Und hier die CSS- ich zur Zeit verwenden:

.button { 
    padding: 30; 
    background-color: shade (@bg_color, 55); 
} 

togglebutton entry { 
    color: 900185; 
} 

button:active { 
    background-color: #0274d9; 
} 

Was derzeit geschieht: Das neue Fenster Laden ist in Ordnung, aber es scheint, dass es egal ist, was ich in die .css schreibe, ändert es nicht das Aussehen der Fensterelemente. Ich kann sehen, dass die .css geladen ist, weil ich Warnungen wie:

bekommen Was ist los? Muss ich die .css-Datei einzeln auf jede untergeordnete Leiste anwenden?

+0

Die 'Nicht-Einheiten verwendet, ist deprecated' stammt aus alten CSS-Dateien, in denen Einige Größen werden nur durch eine Zahl angegeben, z. B. "border = 1". Gegenwärtige gtk-Versionen erfordern, dass sie als "1px" spezifiziert werden. Denken Sie daran, wenn Ihr Thema so alt ist, werden Sie wahrscheinlich Probleme mit gtk neuer als 3.20 haben! Es sollte jedoch Ihr Hauptproblem nicht beeinflussen. – jcoppens

Antwort

3

Ok ist, fand ich mich, was das Problem war:

Gemäß der Dokumentation von gtk_style_context_add_provider CSS-Anbieter sind nicht auf die Kinder-Stil Kontexten geerbt.

So muss entweder die CSS für jedes einzelne Widget anzuwenden oder gtk_style_context_add_provider_for_screen verwenden die CSS des gesamten Bildschirms zu ändern:

gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER); 
+0

Ich leide unter dem gleichen Problem, wo Sie gefunden haben "Derzeit werden CSS-Provider nicht an die Children Style-Kontexte vererbt." ? –

+0

Aus dem offiziellen Dokument der Methode: https://developer.gnome.org/gtk3/stable/GtkStyleContext.html#gtk-style-context-add-provider ... Ich werde die Info zu meiner Antwort hinzufügen – Alex

1

Versuchen mit dieser

.button { 
 
    padding: 30px; /* px unit added */ 
 
    background-color: shade (@bg_color, 55); 
 
} 
 
    
 
.togglebutton .entry { 
 
    color: #900185; /* # added */ 
 
} 
 
    
 
.button:active { 
 
    background-color: #0274d9; 
 
}
<button class="button">aaaa</button> 
 
<button class="button togglebutton"><span class="entry">aaaa</span></button>

+0

Buttons sehen immer noch gleich aus :(.. Ich habe es auch mit Farbe probiert: rot/color: blue, aber es ändert nichts. – Alex

+0

Ich habe das Snippet aktualisiert. Du hast '.' vor den Klassennamen vergessen –

+0

Danke für der "." Hinweis, aber immer noch nichts .. scheint ein gtk3 ähnliches Problem zu sein. – Alex

1

einer Liste mit Vorschlägen zu lange als Kommentare zu setzen:

  • Könnte es sein, dass Sie eine andere Version Ihres Themas CSS haben installiert in ~/.themes? Wenn dies der Fall ist, wird dieses Thema das Thema in /usr/share/themes ersetzen.

  • Seit XDG, gibt es noch eine weitere Möglichkeit für den Standort des CSS: Von der dev documentation ($XDG_CONFIG_HOME unten typischerweise ~/.config ist):

In addition, certain files will be read when GTK+ is initialized. First, the file $XDG_CONFIG_HOME/gtk-3.0/gtk.css is loaded if it exists. Then, GTK+ loads the first existing file among XDG_DATA_HOME/themes/theme-name/gtk-VERSION/gtk.css, $HOME/.themes/theme-name/gtk-VERSION/gtk.css, $XDG_DATA_DIRS/themes/theme-name/gtk-VERSION/gtk.css and DATADIR/share/themes/THEME/gtk-VERSION/gtk.css, where THEME is the name of the current theme (see the #GtkSettings:gtk-theme-name setting), DATADIR is the prefix configured when GTK+ was compiled (unless overridden by the GTK_DATA_PREFIX` environment variable), and VERSION is the GTK+ version number. If no file is found for the current version, GTK+ tries older versions all the way back to 3.0.

  • Eine andere Lösung für Sie sein könnte Verwenden Sie die GtkCssProvider Schnittstelle für bestimmte Widgetstile.

Eine interessante Referenz Installing, Obtaining, and Making GTK Themes

+0

Ich habe nicht den Ordner "~/.themes". Ich habe "~/config/gtk-3.0" und "~/config/gtk-2.0", aber innen ist keine "gtk.css". $ XDG_CONFIG_HOME ist nicht gesetzt, daher werde ich den Standard verwenden. Also ich nehme einfach das Default-Theme. – Alex

+0

Ich benutze bereits den GtkCssProvider im C-Code (siehe Code oben) .. gibt es einen anderen für bestimmte Widgets? ... eigentlich möchte ich kein ganzes Thema aufbauen. Ich möchte nur mehr Kontrast zwischen "gedrückt" und "nicht gedrückt" der Umschalttaste haben, egal welches Thema verwendet wird. – Alex