# PyQt5 水平布局

> 原文： [https://pythonspot.com/pyqt5-horizo​​ntal-layout/](https://pythonspot.com/pyqt5-horizontal-layout/)

窗口可以包含小部件（按钮，文本字段，图像等）。 窗口小部件经常添加到布局中。 水平布局可用于在水平方向上（动态）添加小部件。

在本文中，我们将向您展示如何使用水平布局在水平方向上添加按钮。

![pyqt5-horizontal-layout](img/b18a764c1fce5b869fc970d63229d0d9.jpg)

## 水平布局示例

我们将显示整个代码，然后进行解释。

```py
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QGroupBox, QDialog, QVBoxLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot

class App(QDialog):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 layout - pythonspot.com'
        self.left = 10
        self.top = 10
        self.width = 320
        self.height = 100
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createHorizontalLayout()

        windowLayout = QVBoxLayout()
        windowLayout.addWidget(self.horizontalGroupBox)
        self.setLayout(windowLayout)

        self.show()

    def createHorizontalLayout(self):
        self.horizontalGroupBox = QGroupBox("What is your favorite color?")
        layout = QHBoxLayout()

        buttonBlue = QPushButton('Blue', self)
        buttonBlue.clicked.connect(self.on_click)
        layout.addWidget(buttonBlue)

        buttonRed = QPushButton('Red', self)
        buttonRed.clicked.connect(self.on_click)
        layout.addWidget(buttonRed)

        buttonGreen = QPushButton('Green', self)
        buttonGreen.clicked.connect(self.on_click)
        layout.addWidget(buttonGreen)

        self.horizontalGroupBox.setLayout(layout)

    @pyqtSlot()
    def on_click(self):
        print('PyQt5 button click')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

```

## 解释

我们首先在`initUI()`方法中调用`self.createHorizo​​ntalLayout()`方法。 在方法内部，我们创建了一个带有标题和水平布局的框：

```py
self.horizontalGroupBox = QGroupBox("What is your favorite color?")
layout = QHBoxLayout()

```

我们创建小部件（在此示例中为`QPushButtons`），并将它们一个接一个地添加到布局中：

```py
buttonBlue = QPushButton('Blue', self)
buttonBlue.clicked.connect(self.on_click)
layout.addWidget(buttonBlue)

```

我们将标题框设置为包含水平布局：

```py
self.horizontalGroupBox.setLayout(layout)

```

在`initUI`方法中，我们将其添加到窗口中：

```py
windowLayout = QVBoxLayout()
windowLayout.addWidget(self.horizontalGroupBox)
self.setLayout(windowLayout)

```

[下载 PyQT5 示例](https://pythonspot.com/download-pyqt5-examples/)