QHBoxLayout
采用QBOXLayout类可以在水平和垂直方向上排列控件,QHBoxLayout和QVBoxLayout类继承自QBoxLayout
采用QHBoxLayout类,按照从左到右的顺序来添加控件
QHBoxLayout类中常用的方法如下
方法
|
描述
|
addLayout(self,stretch=0)
|
在窗口的右边添加布局,使用stretch(伸缩量)进行伸缩,伸缩量默认为0
|
addWidget(self,QWidget.stretch,Qt.Alignmeny alihnment)
|
在布局中添加控件
|
|
stretch(伸缩量),只适用于QBoxLayout,控件和窗口会随着伸缩量的变大而增大
|
|
alignment:指定的对齐方式
|
addSpacing(self,int)
|
设置各控件的上下间距,通过该方法可以增加额外的控件
|
对齐方式参数
参数
|
描述
|
Qt.AlignLeft
|
水平方向居左对齐
|
Qt.AlignRight水平方向具有对齐
|
|
Qt.AlignCenter
|
水平方向居中对齐
|
Qt.AlignJustify
|
水平方向两端对齐
|
Qt.AlignTop
|
垂直方向靠上对齐
|
Qt.AlignBottom
|
垂直方向靠下对齐
|
Qt.AlignVCenter
|
垂直方向居中对齐
|
实例:水平布局管理的例子
import
sys
from
PyQt5.QtWidgets
import
QApplication ,QWidget ,QHBoxLayout , QPushButton
class
Winform
(QWidget)
:
def
__init__
(self,parent=None)
:
super(Winform,self).__init__(parent)
self.setWindowTitle(
"水平布局管理例子"
)
hlayout = QHBoxLayout()
hlayout.addWidget( QPushButton(str(
1
)))
hlayout.addWidget( QPushButton(str(
2
)))
hlayout.addWidget( QPushButton(str(
3
)))
hlayout.addWidget( QPushButton(str(
4
)))
hlayout.addWidget( QPushButton(str(
5
)))
self.setLayout(hlayout)
if
__name__ ==
"__main__"
:
app = QApplication(sys.argv)
form = Winform()
form.show()
sys.exit(app.exec_())
运行效果图
优化一:设置各控件之间的间距
hlayout.setSpacing(20)
实例二:水平布局对齐方式的使用
在某些情况下,需要将布局中的某些控件居中,俱下显示,那么可以通过对齐方式参数Qt.Alignment来设置,示范如下
import
sys
from
PyQt5.QtWidgets
import
QApplication ,QWidget ,QHBoxLayout , QPushButton
from
PyQt5.QtCore
import
Qt
class
Winform
(QWidget)
:
def
__init__
(self,parent=None)
:
super(Winform,self).__init__(parent)
self.setWindowTitle(
"水平布局管理例子"
)
self.resize(
800
,
200
)
hlayout = QHBoxLayout()
hlayout.addWidget( QPushButton(str(
1
)) ,
0
, Qt.AlignLeft | Qt.AlignTop)
hlayout.addWidget( QPushButton(str(
2
)) ,
0
, Qt.AlignLeft | Qt.AlignTop)
hlayout.addWidget( QPushButton(str(
3
)))
hlayout.addWidget( QPushButton(str(
4
)) ,
0
, Qt.AlignLeft | Qt.AlignBottom )
hlayout.addWidget( QPushButton(str(
5
)),
0
, Qt.AlignLeft | Qt.AlignBottom)
self.setLayout(hlayout)
if
__name__ ==
"__main__"
:
app = QApplication(sys.argv)
form = Winform()
form.show()
sys.exit(app.exec_())
运行效果图如下
实例二:水平布局对齐方式的使用
QHBoxLayout前言采用QBOXLayout类可以在水平和垂直方向上排列控件,QHBoxLayout和QVBoxLayout类继承自QBoxLayout 采用QHBoxLayout类,按照从左到右的顺序来添加控件QHBoxLayout类中常用的方法如下 方法 描述 addLayout(self,stretch=0) 在窗口的右边添加布局,使用s...
QH
Box
Layout
* p
Layout
= new
QH
Box
Layout
();//水平
布局
QPushButton* p1 = new QPushButton("p1");
QPu...
创建第一个窗口一般来说,桌面应用都以窗口(window)形式呈现。因此,要搭建桌面应用,首先要创建窗口。下面这段代码创建了一个空的窗口。这段代码仅仅设置了窗口的标题和大小。下一步,我们要往这个空的窗口里添加部件(widget).为了规范性,我们在Window类里新建一个函数initUI,然后在initUI里为窗口添加部件。为窗口添加部件下面这段代码为窗口添加了一个按钮(QPushButton).但是我们发现,如果没有添加任何
布局
,我们创建的按钮(self.btn),永远被放置在窗口的左上角。即使我们可以用move函数移动它,排版作用也非常有限。因此我们需要为窗口添加
布局
。为窗口添加
布局
PyQt
创建 Q
Box
Layout
的最简单方法是使用便利类,
QH
Box
Layout
(用于 Qt::Horizontal 框)或 QV
Box
Layout
(用于 Qt::Vertical 框)。也可以直接使用 Q
Box
Layout
构造函数,并指定其方向。
二、类型成员
1、enum Q
Box
Layout
::Directio.
是水平
布局
控件,是一个用于构建横向放置
布局
对象;继承Q
Box
Layout
。
QH
Box
Layout
::
QH
Box
Layout
()
构造一个新的水平
布局
管理
器,将它添加到另一个
布局
管理
器中
QH
Box
Layout
::
QH
...
在
pyqt5
中要做到自适应
布局
,必须应用
Layout
类
下面列出类似于 html 中 float 功能的
布局
方法:
实现原理:
PyQt5
中的
布局
中,stretch 属性类似于一个可自适应的空白
布局
。会尽可能将周围的组件
布局
向外挤压
from
PyQt5
.QtWidgets import QV
Box
Layout
,
QH
Box
Layout
# 垂直居中
def vcenter_
layout
(*widgets):
v
box
= QV
Box
Layout
()
v
box
.addStretch()
for widget in widgets:
v
box
.addWidget(widge
Q
Box
Layout
可以在水平方向或垂直方向上排列控件,由
QH
Box
Layout
、QV
Box
Layout
所继承。
QH
Box
Layout
:水平
布局
,在水平方向上排列控件,即:左右排列。
QV
Box
Layout
:垂直
布局
,在垂直方向上排列控件,即:上下排列。
通过查看源码,我们可以发现,水平
布局
、垂直
布局
除了构造时的方向(L...
from
PyQt5
.QtWidgets import QApplication, QWidget, QV
Box
Layout
, QPushButton
app = QApplication([])
window = QWidget()
layout
= QV
Box
Layout
()
layout
.addWidget(QPushButton('Button 1'))
layout
.addWidget(QPushButton('Button 2'))
layout
.addWidget(QPushButton('Button 3'))
window.set
Layout
(
layout
)
window.show()
app.exec_()
2.
QH
Box
Layout
(水平
布局
)
将控件在水平方向上排列。
```python
from
PyQt5
.QtWidgets import QApplication, QWidget,
QH
Box
Layout
, QPushButton
app = QApplication([])
window = QWidget()
layout
=
QH
Box
Layout
()
layout
.addWidget(QPushButton('Button 1'))
layout
.addWidget(QPushButton('Button 2'))
layout
.addWidget(QPushButton('Button 3'))
window.set
Layout
(
layout
)
window.show()
app.exec_()
3. QGrid
Layout
(网格
布局
)
将控件排列在网格中。
```python
from
PyQt5
.QtWidgets import QApplication, QWidget, QGrid
Layout
, QPushButton
app = QApplication([])
window = QWidget()
layout
= QGrid
Layout
()
layout
.addWidget(QPushButton('Button 1'), 0, 0)
layout
.addWidget(QPushButton('Button 2'), 0, 1)
layout
.addWidget(QPushButton('Button 3'), 1, 0)
layout
.addWidget(QPushButton('Button 4'), 1, 1)
window.set
Layout
(
layout
)
window.show()
app.exec_()
4. QForm
Layout
(表单
布局
)
将标签和输入控件排列在一起,以形成表单。
```python
from
PyQt5
.QtWidgets import QApplication, QWidget, QForm
Layout
, QLineEdit, QLabel
app = QApplication([])
window = QWidget()
layout
= QForm
Layout
()
layout
.addRow(QLabel('Name:'), QLineEdit())
layout
.addRow(QLabel('Age:'), QLineEdit())
layout
.addRow(QLabel('Email:'), QLineEdit())
window.set
Layout
(
layout
)
window.show()
app.exec_()
以上是一些常用的
布局
管理
器,你也可以自己实现并自定义
布局
管理
器。