专业编程基础技术教程

网站首页 > 基础教程 正文

实战PyQt5: 017-布局管理之QHBoxLayout

ccvgpt 2024-08-04 12:03:57 基础教程 9 ℃



实战PyQt5: 017-布局管理之QHBoxLayout

PyQT布局管理简介

在前面的程序中,当我们需要在窗口的某个位置放置一个布局时,总是在创建部件之后,调用QWidget中的相关方法,如move(),resize(),setGeometry()来指定部件的位置和大小。用这种方式来对窗口中的部件进行部件,存在很多缺陷,比如:

1. 当对窗口中的部件进行增减时,需要手工调整其它部件的位置和大小,这种方式不仅效率低下而且容易出错;

2. 当一个窗口中的部件较多时,计算每个部件在窗口中的坐标和大小是一个繁杂的任务,且不容易达到理想的外观布局。

3. 当主窗口的大小做调整时,窗口中的部件不随主窗口的调整而调整,这可能导致窗口中的一些部件不可见或者窗口中的所有部件聚集在主窗口的某一部分,导致整个窗口部件的位置不协调等。

因此,我们需要有布局管理的相关类来实现自动布局。在PyQt中,可以使用QLayout的四个子类(这四个子类分别是QHBoxLayout,QVBoxLayout, QFrameLayout和QGridLayout)来实现自动布局。

QLayout常用方法:

  • addLayout(): 在布局中添加一个布局,即布局可以嵌套;
  • addWidget(): 在布局中添加一个控件;
  • addSpacing(): 添加指定像素的空白控件;
  • addStretch(): 添加伸缩控制,类似弹簧,当窗口变化时,把部件推向某方向;
  • setSpacing(): 设置布局内部控件的间距;
  • setContentsMargins(): 设置布局边沿的空白间距;
  • removeWidget(): 删除指定的部件;
  • removeItem(): 删除指定的QLayoutItemm。

QHBoxLayout简介

QHBoxLayout继承自QBoxLayout,QBoxLayout可以在水平或者垂直方向上排列各种部件,QBoxLayout窗口布局如下图所示:

QHBoxLayout控制为水平布局管理,在水平方向上控制部件排列。其布局如下图所示:

QHBoxLayout类继承关系:

测试QHBoxLayout

创建文件qhboxlayout.py, 创建一个水平布局,添加四个按钮,代码如下:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout
 
class DemoHBoxLayout(QWidget):
    def __init__(self, parent=None):
        super(DemoHBoxLayout, self).__init__(parent)
        
        # 设置窗口标题
        self.setWindowTitle('实战PyQt5: QHBoxLayout Demo!')      
        # 设置窗口大小
        self.resize(400, 120)
 
        #创建一个水平布局管理器
        hbl = QHBoxLayout(self)
        hbl.addWidget(QPushButton('春', self))
        hbl.addWidget(QPushButton('夏', self))
        hbl.addWidget(QPushButton('秋', self))
        hbl.addWidget(QPushButton('冬', self))
        
        self.setLayout(hbl)
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoHBoxLayout()
    window.show()
    sys.exit(app.exec())

运行结果如下图所示:

本文知识点

  • PyQt布局管理基本概念;
  • QPlayout中添加布局和部件;
  • 添加布局后,部件的的空间位置和大小能随着窗口的调整而调整;
  • QHBoxLayout的用法。

喜欢本文内容就收藏,点赞,评论,关注和转发。

Tags:

最近发表
标签列表