更改gtk.Paned控件的手柄大小

4 投票
3 回答
1843 浏览
提问于 2025-04-15 15:49

gtk.Paned 这个东西里面有一个叫做 'handle-size' 的样式属性,我猜这个属性是用来改变手柄大小的,但它是只读的,那我该怎么改变它呢?(在 PyGtk 中)

3 个回答

0

顺便说一下:handle-size在GTK 3.20版本中已经不再使用了。

你可以通过CSS来改变手柄的大小:

paned separator{
  background-size:40px;
  min-height: 40px;
}

C语言代码

我不能提供Python代码,但为了参考,我会贴上C语言的代码。

void
_paned_change_handle_size(GtkWidget *widget)
{
  GtkStyleContext * context = gtk_widget_get_style_context (widget);

  GtkCssProvider * css = gtk_css_provider_new ();
  gtk_css_provider_load_from_data (css,
                                   "paned separator{"
                                   "background-size:40px;"
                                   "min-height: 40px;"
                                   "}",
                                   -1,NULL);


  gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER(css), 
                      GTK_STYLE_PROVIDER_PRIORITY_USER);
}
2

在你启动自己的应用程序之前,可以先加载一个自定义的资源文件。在C语言中(希望翻译成Python也很简单),可以这样做:

#include <gtk/gtk.h>

int
main(gint argc, gchar **argv)
{
    GtkWidget *window;
    GtkPaned  *paned;

    gtk_init(&argc, &argv);

    gtk_rc_parse_string("style 'my_style' {\n"
                        "    GtkPaned::handle-size = 200\n"
                        " }\n"
                        "widget '*' style 'my_style'");

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    paned = (GtkPaned *) gtk_hpaned_new();
    gtk_paned_add1(paned, gtk_label_new("left"));
    gtk_paned_add2(paned, gtk_label_new("right"));

    gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(paned));

    gtk_widget_show_all(window);
    gtk_main();

    return 0;
}
3

根据gtk.Widget的文档:

gtk.Widget引入了样式属性——这些属性其实是对象的特性,但它们并不是直接存储在对象上,而是存储在与这个小部件关联的样式对象中。样式属性是在资源文件中设置的。这个机制用于配置一些东西,比如滚动条箭头的位置,这样主题的设计者就能更好地控制应用程序的外观,而不需要用C语言编写主题引擎。

在GTK中,一般的做法是不要在你的程序中设置样式属性,而是使用标准的用户界面小部件,让用户自己决定它们的外观(通过桌面主题来实现)。

撰写回答