如何根据状态设置GTK2 CheckButton的背景颜色
我无法根据状态设置CheckButton的背景颜色。默认情况下,它选中时显示红色,未选中时显示白色:
我尝试使用gtk_widget_modify_base()但未成功,代码如下:
GdkColor colGreen; gdk_color_parse("#90ee90", &colGreen); GtkWidget * myCheck = gtk_check_button_new_with_label("S1"); gtk_widget_modify_base(GTK_WIDGET(myCheck), GTK_STATE_ACTIVE, &colGreen);
实用解决提示:
针对GTK3及以上版本:用CSS替代旧API
gtk_widget_modify_base()在GTK3中已被弃用,推荐使用CSS定义样式,兼容性和灵活性更强。示例代码:// 创建CSS提供器并加载样式 GtkCssProvider *provider = gtk_css_provider_new(); gtk_css_provider_load_from_data(provider, "checkbutton:active { background-color: #90ee90; }\n" "checkbutton { background-color: white; }", -1, NULL); // 将样式应用到全局屏幕 gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); g_object_unref(provider);针对GTK2版本:修正状态枚举值
GTK_STATE_ACTIVE对应按钮被按下的瞬时状态,选中状态需要用GTK_STATE_SELECTED,同时可以显式设置默认状态的背景色:GdkColor colGreen, colWhite; gdk_color_parse("#90ee90", &colGreen); gdk_color_parse("#ffffff", &colWhite); GtkWidget * myCheck = gtk_check_button_new_with_label("S1"); gtk_widget_modify_base(GTK_WIDGET(myCheck), GTK_STATE_SELECTED, &colGreen); gtk_widget_modify_base(GTK_WIDGET(myCheck), GTK_STATE_NORMAL, &colWhite);解决主题覆盖问题
部分GTK主题会强制覆盖控件样式,可开启控件的自绘属性让应用自定义背景:gtk_widget_set_app_paintable(myCheck, TRUE);
内容的提问来源于stack exchange,提问作者sylwa06
相关产品推荐
相关产品推荐

