2016-07-21 25 views
1

私はグレイドファイルを読み込み、すべてのトグルボタン(クラス "GtkToggleButton"、私は "押した"色を変更したい)の色を変更したいと思います。グレイドファイルの多くのサブサブ要素の1つ。ここで C-コード-切り取ら私はの.cssと.gladeをロードするために使用します。gladeを使ってgtk3でCSSを取得しないでください

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); 
} 

そして、ここで私が現在使用しているの.css:

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

togglebutton entry { 
    color: 900185; 
} 

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

現在、何が起こる:新しいウィンドウを負荷は問題ありませんが、.cssに書き込む内容は問題ではないようですが、ウィンドウ要素の外観は変わりません。

Gtk-WARNING **: Theme parsing error: test.css:2:13: Not using units is deprecated. Assuming 'px'.

何が問題なのですか。別々のサブウィジットに.cssを適用する必要がありますか?

+0

'ユニットを使用しないとdeprecated'が古いCSSファイル、から来ていますいくつかのサイズは 'border = 1'のように数字で指定されます。現在のgtkのバージョンでは '1px'と指定する必要があります。あなたのテーマが古すぎる場合は、3.20より新しいgtkの問題に遭遇するでしょう!あなたの主な問題には影響しません。 – jcoppens

答えて

3

ですが、私は問題が何であったか、自分自身を見つけました。

だからどちらか一つが各1つのウィジェットにCSSを適用するか、画面全体のCSSを変更するgtk_style_context_add_provider_for_screenを使用する必要があります。

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

私は同じ問題を抱えています。「現在、CSSプロバイダは子スタイルのコンテキストに継承されていません。 ? –

+0

メソッドの正式なドキュメント:https://developer.gnome.org/gtk3/stable/GtkStyleContext.html#gtk-style-context-add-provider ...私は私の答えに情報を追加します – Alex

1

この

.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

ボタンはまだ変わっていません:(私も同様に色を試しました:赤色/青色:青色ですが、何も変更しません) – Alex

+0

クラス名の前に '.'を忘れました –

+0

ありがとう"。"ヒントは、しかし、まだ何も.. gtk3関連の問題のようです。 – Alex

1

コメントとして入れて長すぎる提案のリストをお試しください:

  • それはあなたがあなたのテーマのCSSの別のバージョンを持っていることだろう~/.themesにインストールされていますか?もしそうなら、そのテーマは/usr/share/themesのテーマに取って代わります。 XDG以来

  • は、CSSの場所のためのさらに別の可能性がある:dev documentationから(以下$XDG_CONFIG_HOME通常~/.configです):

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.

  • あなたにあるかもしれないための別の解決策特定のウィジェットスタイルにはGtkCssProviderインターフェースを使用してください。子どもたちのスタイルのコンテキストに継承されませんgtk_style_context_add_provider CSSプロバイダのドキュメントによると

興味深いの参照は、[OK]をInstalling, Obtaining, and Making GTK Themes

+0

"〜/ .themes"というフォルダはありません。私は "〜/ config/gtk-3.0"と "〜/ config/gtk-2.0"を持っていますが、内部は "gtk.css"ではありません。 $ XDG_CONFIG_HOMEは設定されていないので、デフォルト値が使用されるようにします。だから私はちょうどデフォルトテーマを使用することをお勧めします。 – Alex

+0

私は既にGtkCssProviderをCコードで使用しています(上記のコードを参照してください)。特定のウィジェット用に別のものがありますか? ...実際には、私は全体のテーマを構築したくない。トグルボタンの「押した」と「押していない」との対比は、テーマが使用されているかどうかにかかわらず、もっと大きくしたい。 – Alex

関連する問題