IT虾米网

python之有人可以解释 Gtk2 包装吗

developer 2024年01月13日 编程语言 262 0

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

  • 菜单栏
  • 工具栏
  • TextView /编辑器控件

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

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

请您参考如下方法:

盒子包装真的很简单,所以你没能理解它可能是因为你想象的比实际情况更复杂。

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

水平(HBox)

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

垂直(垂直盒)

[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 的另一个参数是填充参数,通常可以忽略它。这里只要说如果 expand=False 则完全忽略 fill 参数就足够了(因为在那种情况下它没有意义)。

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


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!