我们使用一些软件的时候发现,软件上的按钮,图标,输入框等部件,摆放的井井有条。就算是我们改变软件窗体的大小,那些部件依然能适应我们的调整,以最优美的形式展现出来。这里就用到了布局管理
布局管理就是替你管理组件显示样式、位置等内容的
这里先介绍两个组件:
label=gtk.Label('这个组件负责显示文字')
button=gtk.Label('这个组件负责显示一个按钮')
VBox,HBox,Alignment:
VBox -- 纵向盒子布局
HBox -- 横向盒子布局
Alignment -- 控制子部件的显示位置、大小(只能有一个子部件)
下面展示一个使用了以上几个部件做出来的简单效果:
分解:
- 绿色部分是一个VBox
- 每一个红色部分是一个HBox
- 黄色部分是一个Aligenment
代码们:
#coding=utf-8
__author__ = '一个胖子'
import gtk
class VHA(gtk.Window):
def __init__(self):
super(VHA,self).__init__()
self.set_size_request(500,300)
self.set_position(gtk.WIN_POS_CENTER)
self.set_title('模拟一个麻将桌的布局')
self._init_child()
self.connect('destroy',gtk.main_quit)
self.show_all()
def _init_child(self):
vbox=gtk.VBox(False,3)
l1=gtk.Label('角')
l1.set_size_request(20,20)
l2=gtk.Label('角')
l2.set_size_request(20,20)
l3=gtk.Label('角')
l3.set_size_request(20,20)
l4=gtk.Label('角')
l4.set_size_request(20,20)
l5=gtk.Label('这个放在中间')
calign=gtk.Alignment(0.3,0,0,0.3)
calign.add(l5)
b1=gtk.Button('北')
b2=gtk.Button('西')
b3=gtk.Button('东')
b4=gtk.Button('南')
hbox1=gtk.HBox(False,3)
hbox1.pack_start(l1,False,False)
hbox1.pack_start(b1)
hbox1.pack_start(l2,False,False)
vbox.pack_start(hbox1,False,False)
hbox2=gtk.HBox(False,3)
hbox2.pack_start(b2,False,False)
hbox2.pack_start(calign)
hbox2.pack_start(b3,False,False)
vbox.pack_start(hbox2)
hbox3=gtk.HBox(False,3)
hbox3.pack_start(l3,False,False)
hbox3.pack_start(b4)
hbox3.pack_start(l4,False,False)
vbox.pack_start(hbox3,False,False)
self.add(vbox)
if __name__=='__main__':
VHA()
gtk.main()
关键点解释:
gtk.HBox(False,3)#两个参数分别是(子组件大小是否平均分派,子部件间距)
gtk.VBox(False,3)#参数意思同上
vbox.pack_start(hbox1,False,False,0)
#参数1:添加的子部件
#参数2:子部件占用大小,True:与其他部件平均分配空间,False:最小占用
#**参数2的False,必须和类初始化的时候的False一起使用才有效
#参数3:没研究
#参数4:没研究
alg=Alignment(1,1,0,0)
#参数1:水平方向上,左侧空白位置占用比---1表示左侧空白位置占用全部,即组件在最右边显示
#参数2:垂直方向上,上方空白位置占用比---1表示上方空白位置占用全部,即组件在最下边显示
#参数3:子部件水平方向占用比,0最小显示,1最大显示
#参数4:子部件垂直方向占用比,0最小显示,1最大显示