## page was renamed from zhArticleTemplate ##language:zh #pragma section-numbers on ''' 含有章节索引的中文 文章模板 ''' ::-- ehu4ever [<>] <> = 打开box = 由于非常的灵活,packing在刚刚开始接触的时候真是让人头痛。它有很多的个性化选项,一时间是很难搞清楚它们的。但是,它只有五种不同的基本样式。下图是程序packbox.py的运行结果(参数是1): ||Figure 4.1. Packing: Five Variations|| ||{{attachment:packbox1.png}}|| 主窗口的每一行都是一个包含了多个widget的gtk.HBox,每一个widget都是用相同的方法放进gtk.HBox里的(当然使用了一些性化的参数)。 这是一个pack_start()的例子: {{{ box.pack_start(child, expand, fill, padding) }}} 上面的box就是放widget的gtk.HBox。第一个参数child就是要放进gtk.HBox的widget,现在是gtk.Button。 expand参数如果是True,那么gtk.HBox里的widget将会均匀地分布满整个box(各个widget不会贴在一起);如果是False,那么gtk.HBox里的widget会一个接一个地靠向一边(左或右)。pack_start()和pack_end()都有这个功能。 fill参数是True的时候,box里的widget一个贴一个地占满整个box;当它是False的时候,box里的widget在有足够空间的时候是不会贴在一起的。所以,它只会在expand参数是True的时候才会产生作用。 Python允许函数定义参数的关键词和默认值,在这篇文档里我们尽可能地定义关键词和默认值。比如,pack_start()是这样定义的: {{{ box.pack_start(child, expand=True, fill=True, padding=0) box.pack_end(child, expand=True, fill=True, padding=0) }}} 上面的定义中child、expand、fill、padding是关键词,expand、fill、padding是有默认值的,而child必须有一个传入值。 box是这样定义的: {{{ hbox = gtk.HBox(homogeneous=False, spacing=0) vbox = gtk.VBox(homogeneous=False, spacing=0) }}} 上面的homogeneous参数是决定box里的widget是否是同样大小(gtk.HBox里是指同样宽,gtk.VBox里是指同样高)。当它是True的时候,就和expand参数永远是True是一个样了。 spacing和padding之间有什么区别呢?spacing是指定widget之间的空隙怎样怎样,而padding是指定widget的某一条边怎样怎样。 下图是packbox.py当命令行参数是2的时候的运行结果,演示了spacing和padding之间的不同。 ||Figure 4.2. Packing with Spacing and Padding|| ||{{attachment:packbox2.png}}|| 下图是packbox.py当命令行参数是3的时候的运行结果,演示了pack_end()的使用。那个文本标签“end”是用pack_end()放进box里的。无论主窗口大小缩放,它都会在box的右边。 ||Figure 4.3. Packing with pack_end()|| ||{{attachment:packbox3.png}}||