在pyGTK中创建GUI时,我经常希望以指定的比例扩展多个子对象。作为一个例子(不是我的特定应用程序,只是我觉得很容易绘制的东西),想象我正在创建某种照片查看器,在右边的选项卡中显示EXIF元数据,我希望这些维护2: 1比例,因此照片总是占据宽度的2/3,元数据占宽度的1/3:
在wxWindows中,您会为每个项目分配一个“权重”参数,因此左侧VBox
将weight = 2
而右侧VBox
将weight = 1
,然后,当您调整窗口大小时,容器将保持2:1的比例。但是,在GTK +中,你可以做的就是选择是否要扩展容器,所以在这种情况下,我会使用类似的东西:
top_level_hbox.pack_start(exif_container, expand=False)
top_level_hbox.pack_start(photo_container, expand=True, fill=True)
但是,我相信这会使exif_container
基于其子窗口小部件的大小保持固定大小,并且photo_container
会根据需要增长,所以即使它们最初有2: 1比例,这将无法在调整大小的窗口中存活。是否有一种简单或至少标准的方式在GTK中进行这种“加权扩展”?
答案 0 :(得分:3)
您可以使用表格布局执行此操作。 IE浏览器。而不是使用hbox,创建一个gtk.Table,单行和3列。将照片部分连接到前两列,将状态面板连接到第三列,在展开时应保持所需的2:1比例。
例如
table = gtk.Table(rows=1, columns=3)
table.attach(photo_container, 0, 2, 0, 1) # Span column 0..2
table.attach(exif_container, 2, 3, 0, 1) # Span final column
window.add(table)
答案 1 :(得分:2)
我同意Brian建议使用gtk.Table。要强制表格单元格大小相同,您可以在构造函数中指定homogeneous=True
。
另一种方法是将photo_container和exif_container打包到gtk.VPaned容器中,该容器允许用户控制两个子容器使用的空间,您也可以使用set_position()
方法动态控制它,尽管可能会有点繁琐。
就个人而言,我倾向于只使用一个带有固定大小exif_container的简单gtk.HBox用于此接口,尽管我可能会将photo_container放入gtk.ScrolledWindow。