原文: https://pythonspot.com/pyqt5-horizontal-layout/

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

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

PyQt5 水平布局 - 图1

水平布局示例

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

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QGroupBox, QDialog, QVBoxLayout
  3. from PyQt5.QtGui import QIcon
  4. from PyQt5.QtCore import pyqtSlot
  5. class App(QDialog):
  6. def __init__(self):
  7. super().__init__()
  8. self.title = 'PyQt5 layout - pythonspot.com'
  9. self.left = 10
  10. self.top = 10
  11. self.width = 320
  12. self.height = 100
  13. self.initUI()
  14. def initUI(self):
  15. self.setWindowTitle(self.title)
  16. self.setGeometry(self.left, self.top, self.width, self.height)
  17. self.createHorizontalLayout()
  18. windowLayout = QVBoxLayout()
  19. windowLayout.addWidget(self.horizontalGroupBox)
  20. self.setLayout(windowLayout)
  21. self.show()
  22. def createHorizontalLayout(self):
  23. self.horizontalGroupBox = QGroupBox("What is your favorite color?")
  24. layout = QHBoxLayout()
  25. buttonBlue = QPushButton('Blue', self)
  26. buttonBlue.clicked.connect(self.on_click)
  27. layout.addWidget(buttonBlue)
  28. buttonRed = QPushButton('Red', self)
  29. buttonRed.clicked.connect(self.on_click)
  30. layout.addWidget(buttonRed)
  31. buttonGreen = QPushButton('Green', self)
  32. buttonGreen.clicked.connect(self.on_click)
  33. layout.addWidget(buttonGreen)
  34. self.horizontalGroupBox.setLayout(layout)
  35. @pyqtSlot()
  36. def on_click(self):
  37. print('PyQt5 button click')
  38. if __name__ == '__main__':
  39. app = QApplication(sys.argv)
  40. ex = App()
  41. sys.exit(app.exec_())

解释

我们首先在initUI()方法中调用self.createHorizontalLayout()方法。 在方法内部,我们创建了一个带有标题和水平布局的框:

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

我们创建小部件(在此示例中为QPushButtons),并将它们一个接一个地添加到布局中:

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

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

  1. self.horizontalGroupBox.setLayout(layout)

initUI方法中,我们将其添加到窗口中:

  1. windowLayout = QVBoxLayout()
  2. windowLayout.addWidget(self.horizontalGroupBox)
  3. self.setLayout(windowLayout)

下载 PyQT5 示例