一直对addStretch感觉怪怪的,直到看见了下面这段话:
addStretch()函数用于在控件按钮间增加伸缩量,
伸缩量的比例为1:1:1:6,意思就是将控件以外的空白地方按设定的比例等分为9份
并按照设定的顺序放入Layout布局器中。
addStretch()的功能相当于是添加一个空白占位控件
1. 比如我有一个QHBoxLayout,我依次addWidget加入如下控件,不使用addStretch()
h_layout = QHBoxLayout()
h_layout.addWidget(QLabel("PLC的IP:"))
h_layout.addWidget(self.ip_edit)
h_layout.addWidget(QLabel("PLC的端口:"))
h_layout.addWidget(self.port_edit)
h_layout.addWidget(self.connect_plc)
布局如下,因为这里没有添加任何空白占位控件,所以已有的这些控件将会将这个横向布局给占满。本来这些控件按默认长度来排列的话会占不满整个长度,但因为没有空白占位控件,所以QT会自动将这些控件按它自己的规则比例来拉升填满。
2. 如果在最后加一个addStretch()。如果一个Layout中只有一个addStretch(),那里面的参数将不重要。
h_layout = QHBoxLayout()
h_layout.addWidget(QLabel("PLC的IP:"))
h_layout.addWidget(self.ip_edit)
h_layout.addWidget(QLabel("PLC的端口:"))
h_layout.addWidget(self.port_edit)
h_layout.addWidget(self.connect_plc)
h_layout.addStretch(1)
布局如下,这里在最后添加了一个空白站位控件,那这个控件会将所有空白位置都占满。这里空白位置是指除了addStretch之外的所有控件按默认长度排列后还剩下的空白。
3. 如果在这个button前面也加一个addStretch,那这两个addStretch将根据各自的参数来按比例来分配空白空间
h_layout = QHBoxLayout()
sub_grid.addLayout(h_layout, 0, 0)
h_layout.addWidget(QLabel("PLC的IP:"))
h_layout.addWidget(self.ip_edit)
h_layout.addWidget(QLabel("PLC的端口:"))
h_layout.addWidget(self.port_edit)
h_layout.addStretch(1)
h_layout.addWidget(self.connect_plc)
h_layout.addStretch(1)
布局如下,
4. 如果button前的addStretch的参数改为2,那button前面的空白长度将是整个空白长度的2/3,后面的空白占整个空白长度的1/3
h_layout = QHBoxLayout()
sub_grid.addLayout(h_layout, 0, 0)
h_layout.addWidget(QLabel("PLC的IP:"))
h_layout.addWidget(self.ip_edit)
h_layout.addWidget(QLabel("PLC的端口:"))
h_layout.addWidget(self.port_edit)
h_layout.addStretch(2)
h_layout.addWidget(self.connect_plc)
h_layout.addStretch(1)
布局如下,