gtk3更改按钮bg颜色

时间:2016-04-09 18:01:26

标签: c gcc gtk3

今天我开始用GTK3编程,我遇到了问题。我无法更改按钮背景颜色,我想在单击按钮后更改它。这是我的代码:

void pushButton( GtkWidget* button )
{
    gtk_button_set_label( GTK_BUTTON( button ), "new_text" );
    GdkRGBA color = {.0, .0, .0, 1.0};
    gtk_widget_override_background_color ( button, GTK_STATE_NORMAL, &color );
}

gtk_button_set_label()运行良好并更改按钮标签。但颜色仍然相同(应该是黑色)。

自版本3.16起,

gtk_widget_override_background_color已被弃用,不应在新编写的代码中使用。如果您希望更改窗口小部件呈现其背景的方式,则应使用自定义CSS样式。

2 个答案:

答案 0 :(得分:1)

您需要向Button添加自定义CSS:

GdkDisplay *display;
GdkScreen *screen;
display = gdk_display_get_default ();
screen = gdk_display_get_default_screen (display);

GtkCssProvider *provider;

provider = gtk_css_provider_new ();

gtk_style_context_add_provider_for_screen (screen, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

gtk_css_provider_load_from_data(provider, CSS, -1, NULL);

g_object_unref (provider);

用一些CSS替换CSS来修改Button

答案 1 :(得分:0)

我将采取另一种方法。问题是要更改单个按钮的背景色。因此,我只为一个按钮更改它。 (不过,我不确定最佳做法)。

  • 添加CSS
  • 别忘了设置 startActivityForResult(intent, TEXT_REQUEST) ,否则颜色设置无效
  • 使用CSS类(在本例中为background-image:none,因为css直接提供给了按钮(仅),因此一切*)是只有按钮。

    *

尽管:请注意,但是此代码将在每次按下按钮时每次创建一个新的提供程序。我认为最好将提供程序存储在某个位置,然后在需要时将其删除并添加到(样式)上下文中。