在 gtk 刻度上更改滑块大小

Changing slider size on a gtk scale

我想在 Linux c 程序中更改 Gtk 标尺的滑块以显示图像。 我正在使用 CSS 文件来设置背景图像。 图片显示出来了,但问题是滑块太小,无法完整显示图片。

我尝试在 CSS 文件中使用最小宽度和最小高度,但它似乎不起作用。

这是我用过的CSS。 border-radius 和 background-image 有效,但 min-width 和 min-height 无效。

.scale .slider{
    min-width: 100px;
    min-height: 150px;
    border-radius: 0px;
    background-image: url("fader.png");
}

编辑:这是将 css 样式应用于 gtk 元素的 C 代码:

...
GtkCssProvider *provider = gtk_css_provider_new ();
gtk_css_provider_load_from_path (provider, "gtktut01.css", NULL);
GtkStyleContext *context;
context = gtk_widget_get_style_context(GTK_WIDGET(window));
gtk_style_context_add_provider    (context,GTK_STYLE_PROVIDER(provider),GTK_STYLE_PROVIDER_PRIORITY_USER);

context = gtk_widget_get_style_context(GTK_WIDGET(scale));
gtk_style_context_add_provider (context,GTK_STYLE_PROVIDER(provider),GTK_STYLE_PROVIDER_PRIORITY_USER);

gtk_widget_show_all (GTK_WIDGET(window));
gtk_main ();
...

window 和比例尺是使用 glade 创建的。

我评论说我之前无法更改旋钮的大小。好吧,我刚刚做了。如果这不是您要问的,请更具体。这是我所做的:

这是我用油漆制作的fader.png

这是 main.c 的 MWE:

#include <gtk/gtk.h>                                                                                

static void activate(GtkApplication *app, gpointer user_data)                                       
{                                                                                                   
    GtkWidget *window;                                                                              
    GtkWidget *box;                                                                                 
    GtkWidget *scale;                                                                               
    GtkStyleContext *context;                                                                       
    GtkCssProvider *provider;                                                                       

    window = gtk_application_window_new(app);                                                       
    gtk_window_set_title(GTK_WINDOW(window), "Window");                                             
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);                                      
    gtk_window_set_default_size(GTK_WINDOW(window), 500, 100);                                      

    box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);                                                
    gtk_container_add(GTK_CONTAINER(window), box);                                                  

    scale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0, 100, 5);                        
    gtk_container_add(GTK_CONTAINER(box), scale);                                                   

    provider = gtk_css_provider_new();                                                              
    gtk_css_provider_load_from_path(provider, "mystyle.css", NULL);                                 

    context = gtk_widget_get_style_context(GTK_WIDGET(window));                                     
    gtk_style_context_add_provider(context, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_USER);

    context = gtk_widget_get_style_context(GTK_WIDGET(scale));                                      
    gtk_style_context_add_provider(context, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_USER);

    gtk_widget_show_all(window);                                                                    
}                                                                                                   

int main(int argc, char **argv)                                                                     
{                                                                                                   
    GtkApplication *app;                                                                            
    int status;                                                                                     

    app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);                         
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);                                  
    status = g_application_run(G_APPLICATION(app), argc, argv);                                     
    g_object_unref(app);                                                                            

    return status;                                                                                  
}             

这里是 mystyle.css

scale slider {                                                                                      
    background-image: -gtk-scaled(url("fader.png"));                                                
    background-size: 100px 100px;                                                                   
    min-width: 100px;                                                                               
    min-height: 100px;                                                                              
}

我也有同样的问题,但只想在 CSS 中进行。对于我使用 .glade gtk 和 python

的项目,我用这个 CSS 解决了这个问题
scale slider{
    min-width: 100px;
    min-height: 150px;  
}

或以下用于 id 为 sliderID

的单个 gtkslider
scale#sliderID slider{
    min-width: 100px;
    min-height: 150px;
}