GTK:ScrolledWindow想要无限空间,如何限制它?

时间:2013-10-03 14:11:56

标签: gtk pygtk

我在GTK ScrolledWindow中在顶层窗口内的笔记本中创建一个大型TreeView(顶层窗口的默认大小有限)。

当我在其中创建一个带有TreeView的ScrolledWindow时,它会分配与TreeView一样多的空间(大于屏幕大小),并且我的顶层窗口被调整为无穷大。如何限制ScrolledWindow的分配或其视口大小?确定其默认大小的机制是什么?

1 个答案:

答案 0 :(得分:1)

问题似乎已经解决了。 ScrolledWindow的大小请求取决于其POLICY(在相应方向上),如果设置了POLICY_NEVER,则等于子窗口小部件(树视图)的请求,请参阅gtkscrolledwindow.c

  

滚动窗口政策和尺寸请求处理:

     

gtk尺寸请求的工作原理如下:

     
      
  • 一个尺寸请求小部件报告它发现最适合展示其内容的宽度和高度,包括儿童。
  •   
  • 用户可以通过指定宽度和/或覆盖尺寸请求时窗口小部件报告的宽度和/或高度   高度不是0到gtk_widget_set_usize()。滚动   窗口需要(用于指示所有三种策略类型)来请求它   宽度和高度基于两种不同的理由。
  •   
     

1)用户希望滚动的窗口恰好适合空间   它被分配给特定维度。

     

1.1)如果用户通过为其指定usize为该特定维度指定了具体值,则不适用   滚动窗口或其子窗口。 2)用户想要滚动   窗口可以占用孩子所需的空间   特定维度(即POLICY_NEVER)。

     

也有点明显:

     

3)用户当然不会选择滚动窗口作为   孩子的容器,如果产生的分配占用更多   比没有滚动窗口的孩子分配的空间。

     

结论:

     

A)从1)开始:滚动窗口不应该请求更多空间   对于特定尺寸而不是最低要求。

     

B)从1.1)开始:可以通过usize来覆盖请求   滚动窗口(自动完成)或通过孩子的使用   (需要检查)。

     

C)从2)开始:对于POLICY_NEVER,简单地滚动窗口   报告孩子的维度。

     

D)从3)开始:滚动窗口子的最小宽度和   A)下的最小高度至少对应于占用的空间   它的滚动条。

因此,如果您设置POLICY_NEVER,ScrolledWindow将自己请求其子项所需的所有位置(如果其子级很大,可能会使屏幕膨胀)。否则,它将请求绘制滚动条所需的最低要求。可能会为它分配比所要求的更多的空间,并且它将在其父级内扩大到合理的大小。

有时您可能希望拥有2个ScrolledWindows,共享一个滚动条。不幸的是,不可能只为其中一个设置POLICY_NEVER并且scrolled_window1.set_adjustment() = scrolled_window2.get_adjustment()由于这样的事实,POLICIES会影响尺寸请求,而scrolled_window1将开始请求不可预测的(可能是巨大的)空间量。