PyQt5 Box layout(放置到相对位置)
2020-04-02 本文已影响0人
_Mirage
stay there when we resize the application window. We use both a HBoxLayout and a QVBoxLayout.
不是根据绝对位置来放置,是根据相对位置。
create a horizontal box layout and add a stretch factor and both buttons. The stretch adds a stretchable space before the two buttons. This will push them to the right of the window.
水平方向的Box可以添加延展度,这样会使得添加的组件被放置到窗体的右边。
The horizontal layout is placed into the vertical layout. The stretch factor in the vertical box will push the horizontal box with the buttons to the bottom of the window.
我们直接把水平方向的Box放置到垂直方向的Box中,然后给垂直方向的Box添加延展度,这样会使得被添加的Box被放置到窗体的下边。
综上,第一次添加的两个按钮就被放置到窗体的右下角了。
只需使用QWidget对象的setLayout函数。
代码:
# coing='utf-8'
from PyQt5.QtWidgets import QApplication, QWidget,\
QPushButton, QHBoxLayout, QVBoxLayout
import sys
class Gui(QWidget):
def __init__(self):
super().__init__()
self.start()
def start(self):
# 构造函数: QPushButton(str, parent: QWidget = None)
# 创建完毕后系统直接帮你放置到(0, 0)的位置
buttons = [
QPushButton('确定', self),
QPushButton('退出', self),
]
# 创建控制水平方向的Box
hbox = QHBoxLayout()
# 给水平方向的box增加延展度,从而使这个box里\
# 面添加的组件被放到窗体右边
hbox.addStretch(1)
# 把需要放置到相对位置的组件添加到box里面
hbox.addWidget(buttons[0])
hbox.addWidget(buttons[1])
# 创建垂直方向的box
vbox = QVBoxLayout()
# 给垂直方向的box增加延展度,从而使被添加\
# 到这里面的box或者组件被放到相对窗体的下面
vbox.addStretch(1)
# 直接把前面已经相对于窗体在右边的布局放进来,\
# 来让这个布局相对于窗体是在下面
vbox.addLayout(hbox)
self.setLayout(vbox)
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle('Box Layout')
self.show()
win = QApplication(sys.argv)
gui = Gui()
sys.exit(win.exec_())
运行结果:
image.png