有人可以解释Gtk2包装吗?

我需要将Gtk2用于项目。 我将使用python / ruby​​。 问题是包装对我来说似乎有些神秘。 我尝试使用VBox,以便在窗口中可以使用以下小部件(按以下顺序):

  • 菜单栏
  • 工具栏
  • 文本视图/编辑器控件

我已经设法用pack_start “猜测”我的方式并获得我需要的布局,但我希望能够理解它。 Ruby Gtk2上的文档看起来太不直观了(python也是如此,因为它是相同的,只是为python编写的),你能解释一下吗?

另外,当我使用pack_start添加组件时, set_size_request并不总是有效。 这是为什么 ?

盒子包装非常简单,所以也许你不理解它是因为你觉得它比它更复杂。

布局是垂直(如一堆砖)或水平(如人的队列)。 该布局中的每个元素都可以展开,也可以不展开。

水平(HBox)

 [widget][widget][widget][widget] 

垂直(VBox)

 [widget] [widget] [widget] [widget] 

例如,带有两个按钮的水平布局(HBox),代码如下:

 import gtk box = gtk.HBox() b1 = gtk.Button('button1') b2 = gtk.Button('button2') box.pack_start(b1) box.pack_start(b2) 

现在因为打包的默认值是expand=True ,所以添加到框中的那些按钮都会扩展,并且它们每个占据一半的面积。 无论容器的大小是多少。 我认为这是“有弹性的”。

扩展小部件:

 [[ widget ][ widget ]] 

因此,如果您希望其中一个按钮不展开,您将按如下方式打包:

 box.pack_start(b1, expand=False) 

非扩展小部件:

 [[widget][ widget ]] 

然后按钮将只占据绘制自己所需的空间:文本+边框+阴影+图像(如果有的话)等。另一个按钮将展开以填充剩余区域。 通常,按钮不需要展开,因此更真实的情况是TextArea,您希望扩展它以填充窗口。

可以传递给pack_start的另一个参数是fill参数,通常可以忽略它。 这就足够了,如果expand=Falsefill参数完全被忽略(因为在那种情况下没有意义)。

你提到的另一件事是set_size_request 。 我一般会说这不是一个好主意。 我一般说,因为有些情况下你需要使用它。 但对于刚开始打包GTK +用户界面的人,我强烈建议不要使用它。 通常,让盒子和其他容器为您处理您的布局。 set_size_request并不完全符合您的预期。 它不会改变窗口小部件的大小,而只会改变请求的空间大小。 它可能会使用更多,甚至可能会拉伸以填充更大的空间。 它很少会变得比请求小,但同样因为它只是一个“请求”,所以不能保证请求将得到满足。

Interesting Posts