【问题标题】:Changing slider size on a gtk scale在 gtk 刻度上更改滑块大小
【发布时间】:2019-08-02 10:51:53
【问题描述】:

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

我尝试在 CSS 文件中使用 min-width 和 min-height,但它似乎不起作用。

这是我使用的 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 ();
...

窗口和比例是使用 glade 创建的。

【问题讨论】:

  • 如果您也可以发布相关的HTML会更好。但是,试试background-size: cover - developer.mozilla.org/en-US/docs/Web/CSS/background-size#Values
  • 嗨,没有 HTML。它是一个使用 GTK+ 的 C 程序。我编辑了我的帖子以包含 C 代码的重要部分。
  • 我尝试了背景大小,但这并没有成功。问题不在于图像的大小,而在于滑块手柄的大小。这太小了,所以只显示图像的一部分。我当然可以调整图像大小,但是滑块手柄太小而无法正常看到。
  • 即使程序是基于使用 GTK+ 的 C 语言,也必须有特定的 HTML 才能应用 CSS,对吧?
  • 不,没有 HTML。 CSS 被 GTK+ 系统应用。它是一个在 Linux 上运行的独立 gui 程序,而不是在 Web 浏览器中。 CSS 被应用到程序的其他部分,例如主窗口背景颜色,滑块上的边框半径也可以调整得很好。只有大小会以某种方式被否决。

标签: css c linux gtk


【解决方案1】:

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

这是我的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;                                                                              
}

【讨论】:

  • 我刚在家里试过你的答案,它有效!我想我之前得到了错误的 GTK 版本。我在工作的电脑上试了一下。我不确定它是否安装了 GTK 3。不管怎样,我现在试过了,这正是我想要的。谢谢。
【解决方案2】:

我也有同样的问题,但只想在 CSS 中做。我为使用 .glade gtk 和 python 的项目使用这个 CSS 解决了这个问题

scale slider{
    min-width: 100px;
    min-height: 150px;  
}

对于带有sliderID的单个gtkslider或以下

scale#sliderID slider{
    min-width: 100px;
    min-height: 150px;
}

【讨论】:

  • 我的回答确实涵盖了手头的问题。 min-widthmin-height 是调整大小的具体方法,因为启动它的问题是因为 2 '.'在css文件中.scale .slider{应该是scale slider{,因为我正在做的唯一区别是使用glade文件而不是在python中编码gtk对象
  • 好吧,我的错,我把你的回答误解为问了另一个问题。
  • 哦,好酷。您是在寻找特别的东西还是只是在浏览
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2019-02-23
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多