布局简介

一个pyqt窗口中可以有多个控件。所谓布局,指的就是多个控件在窗口中的展示方式
布局方式大致分为:

  • 水平布局
  • 竖直布局
  • 网格布局
  • 表单布局

    2. 水平布局QHBoxLayout

    水平布局中,是按照从左往右的顺序添加控件的
    image.png
    代码示例: ```python from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QHBoxLayout from PyQt5.QtCore import * from PyQt5.QtGui import QIcon import sys

1.创建应用程序

app = QApplication(sys.argv)

2.创建窗口

w = QWidget()

修改窗口标题

w.setWindowTitle(‘水平布局’) “””————————— 创建按钮 —————————“”” btn1 = QPushButton(‘1’) btn2 = QPushButton(‘2’) btn3 = QPushButton(‘3’) btn4 = QPushButton(‘4’) btn5 = QPushButton(‘5’)

创建布局

layout = QHBoxLayout()

添加布局到窗口中

w.setLayout(layout)

按钮控件添加到布局中

layout.addWidget(btn1) layout.addWidget(btn2) layout.addWidget(btn3) layout.addWidget(btn4) layout.addWidget(btn5)

3.显示窗口

w.show()

4.等待窗口停止

sys.exit(app.exec())

  1. <a name="HIIHg"></a>
  2. ## 3. 竖直布局QVBoxLayout
  3. 竖直布局采用QVBoxLayout,是采用从上往下的方式添加控件的<br />![image.png](https://cdn.nlark.com/yuque/0/2023/png/27903758/1685238820145-6a4bdf59-73b6-43e7-a0ab-da6578e68290.png#averageHue=%23e8e8e8&clientId=u1f2128f5-fe69-4&from=paste&height=223&id=Sqz8t&originHeight=279&originWidth=482&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=3593&status=done&style=none&taskId=udfb6005e-1c54-40f6-ad7c-9944a2f63a1&title=&width=385.6)<br />代码示例:
  4. ```python
  5. from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout
  6. from PyQt5.QtCore import *
  7. from PyQt5.QtGui import QIcon
  8. import sys
  9. # 1.创建应用程序
  10. app = QApplication(sys.argv)
  11. # 2.创建窗口
  12. w = QWidget()
  13. # 修改窗口标题
  14. w.setWindowTitle('竖直布局')
  15. w.resize(480, 240)
  16. """------------------ 创建并添加5个按钮 ------------------"""
  17. # 创建布局
  18. layout = QVBoxLayout()
  19. # 布局添加到窗口中
  20. w.setLayout(layout)
  21. # 控件添加到布局中
  22. layout.addWidget(QPushButton('1'))
  23. layout.addWidget(QPushButton('2'))
  24. layout.addWidget(QPushButton('3'))
  25. layout.addWidget(QPushButton('4'))
  26. layout.addWidget(QPushButton('5'))
  27. # 3.显示窗口
  28. w.show()
  29. # 4.等待窗口停止
  30. sys.exit(app.exec())

4. 表单布局QFormLayout

表单布局是label-field式的表单布局,顾名思义就是实现表单方式的布局
image.png
代码示例:

  1. from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QFormLayout, QPushButton
  2. import sys
  3. def func():
  4. name = nameEdit.text()
  5. age = ageEdit.text()
  6. phone = phoneEdit.text()
  7. print("姓名:{} 年龄:{} 电话:{}".format(name, age, phone))
  8. # 1.创建应用程序
  9. app = QApplication(sys.argv)
  10. # 2.创建窗口
  11. w = QWidget()
  12. # w.resize(480, 320)
  13. # 修改窗口标题
  14. w.setWindowTitle('表单布局')
  15. """------------------ 创建布局 ------------------"""
  16. layout = QFormLayout()
  17. # 添加到窗口中
  18. w.setLayout(layout)
  19. # 输入框
  20. nameEdit = QLineEdit()
  21. ageEdit = QLineEdit()
  22. phoneEdit = QLineEdit()
  23. btn = QPushButton('发送')
  24. # 信号和槽绑定
  25. btn.clicked.connect(func)
  26. # 添加到布局中
  27. layout.addRow('姓名', nameEdit)
  28. layout.addRow('年纪', ageEdit)
  29. layout.addRow('电话', phoneEdit)
  30. layout.addRow('', btn)
  31. # 3.显示窗口
  32. w.show()
  33. # 4.等待窗口停止
  34. sys.exit(app.exec())

5. 布局嵌套

通过布局嵌套可以实现更加复杂的布局
image.png
代码示例:

  1. from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QHBoxLayout,QVBoxLayout,QFormLayout
  2. from PyQt5.QtCore import *
  3. from PyQt5.QtGui import QIcon
  4. import sys
  5. # 1.创建应用程序
  6. app = QApplication(sys.argv)
  7. # 2.创建窗口
  8. w = QWidget()
  9. # 修改窗口标题
  10. w.setWindowTitle('嵌套布局')
  11. """------------------ 实现布局 ------------------"""
  12. # 整体水平布局
  13. wholeLayout = QHBoxLayout()
  14. # 添加整体布局
  15. w.setLayout(wholeLayout)
  16. # 每一部分布局
  17. layout1 = QHBoxLayout()
  18. layout2 = QVBoxLayout()
  19. layout3 = QVBoxLayout()
  20. # 添加到整体的布局中
  21. wholeLayout.addLayout(layout1)
  22. wholeLayout.addLayout(layout2)
  23. wholeLayout.addLayout(layout3)
  24. # 控件
  25. # 添加第一部分控件
  26. layout1.addWidget(QPushButton('1'))
  27. layout1.addWidget(QPushButton('2'))
  28. # 添加第二部分控件
  29. layout2.addWidget(QPushButton('3'))
  30. layout2.addWidget(QPushButton('4'))
  31. # 添加第三部分控件
  32. layout3.addWidget(QPushButton('5'))
  33. layout3.addWidget(QPushButton('6'))
  34. layout3.addWidget(QPushButton('7'))
  35. # 3.显示窗口
  36. w.show()
  37. # 4.等待窗口停止
  38. sys.exit(app.exec())