gtk2.0 ScrolledWindow滚动策略如果是GTK_POLICY_NEVER导致里面的控件显示不全

⌚Time: 2025-06-20 22:49:00

👨‍💻Author: Jack Ge

在一个垂直容器里面有几个标签,想让他们显示一些文件信息,为了横向能够显示完整,把垂直容器加入滚动窗口里面,如果对滚动窗口设置水平和垂直方向策略都是GTK_POLICY_AUTOMATIC


gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow232),
        GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

在垂直方向上会导致整个滚动窗口被其他控件挤压,它就压缩内部的垂直容器,一开始就出现垂直滚动条,非常难看

如果设置垂直方向为GTK_POLICY_NEVER


gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow232),
        GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);

他会取得一开始内部垂直容器所需的垂直大小,不出现垂直滚动条,但是当内部垂直容器里面的标签出现换行,扩展,垂直容器就会扩展,但是在滚动窗口里会显示不全,因为滚动窗口垂直方向策略为不出现滚动条。

最好的办法是一开始指定滚动窗口的垂直方向所需大小,超过内部垂直容器初始所需大小,并且指定垂直策略也是GTK_POLICY_AUTOMATIC

gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow232),
        GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_widget_set_size_request(scrolledWindow232, -1, 200);

这样它一开始就不会被其他垂直方向的控件挤压而挤压内部垂直容器了,也不会一开始就出现垂直滚动条,只有当内部垂直容器扩展之后,它才会出现垂直滚动条,达到想要的效果。