목차
1. 수직 레이아웃
모듈 필요: QVBoxLayout
# 垂直布局
layout = QVBoxLayout()
………………
# 应用设置的布局器
self.setLayout(layout)
모듈 사이의 리트랙터(스프링으로 이해될 수 있으며 구성 요소 사이에 추가되어 위치가 커짐)
참고: 괄호 안에 숫자를 추가하면 다양한 스프링의 비율을 구별할 수 있습니다.
layout.addStretch()
코드는 클래스에 캡슐화됩니다(이전 코드는 직접 작성됨).
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit, QDesktopWidget, QVBoxLayout
class Windows(QWidget):
def __init__(self):
# 调用父类的__init__方法(并传入子类,或实例)
super(Windows, self).__init__()
# 设置大小
self.resize(700, 500)
self.setWindowTitle("pyqt5程序") # 窗口标题
# 垂直布局
layout = QVBoxLayout()
# 按钮
btn1 = QPushButton('账号')
layout.addWidget(btn1) # 添加到布局器
btn2 = QPushButton('密码')
layout.addWidget(btn2) # 添加到布局器
btn3 = QPushButton('确认')
layout.addWidget(btn3) # 添加到布局器
layout.addStretch(2)
# 应用设置的布局器
self.setLayout(layout)
if __name__ == '__main__':
# 接收参数(仅有一个)
app = QApplication(sys.argv)
w = Windows() # 创建一个窗口(继承了QWindows,并封装为一个类)
w.show() # 展示窗口
sys.exit(app.exec_()) # 程序进入循环等待,并在退出时关闭应用
둘째, 레이아웃의 조합
수직 배치기 + 수평 배치기
관계: 마트료시카
대형 레이아웃터에서 여러 레이아웃터의 수직, 수평 관계를 확인한 후 ----> 중첩 인형의 레이아웃터를 별도로 처리합니다.
알아채다:
인형 속 인형의 경우 ---> 그룹으로 묶은 후 그룹의 레이아웃을 설정합니다.
그룹 필수 모듈: QGroupBox
수평 + 수직 모듈: QHBoxLayout, QVBoxLayout
그룹 설정: group1 = QGroupBox()
3. 가로 레이아웃 + 세로 레이아웃(마트료시카)
암호:
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit, QDesktopWidget, QHBoxLayout, QVBoxLayout, QGroupBox, QRadioButton
class Windows(QWidget):
def __init__(self):
# 调用父类的__init__方法(并传入子类,或实例)
super(Windows, self).__init__()
self.init_ui()
def init_ui(self):
# 先定义最外层的垂直布局(水平布局是QHBoxLayout):垂直布局+水平布局-->垂直关系
container = QVBoxLayout() # 最外层布局器(命名为容器)
#——————————创建第一个组(垂直布局)——————————#
group1_box = QGroupBox('target') # 组
target_layout = QVBoxLayout() # 布局
# 控件
btn1 = QRadioButton('target1')
btn2 = QRadioButton('target2')
btn3 = QRadioButton('target3')
btn4 = QPushButton('确认')
# 将控件添加到布局中
target_layout.addWidget(btn1)
target_layout.addWidget(btn2)
target_layout.addWidget(btn3)
target_layout.addWidget(btn4)
# 将布局设置到组中
group1_box.setLayout(target_layout)
# ——————————创建第二个组(水平布局)——————————#
group2_box = QGroupBox('test') # 组
test_layout = QHBoxLayout() # 布局
# 控件
btn1 = QRadioButton('test1')
btn2 = QRadioButton('test2')
btn3 = QRadioButton('test3')
# 将控件添加到布局中
test_layout.addWidget(btn1)
test_layout.addWidget(btn2)
test_layout.addWidget(btn3)
# 将布局设置到组中
group2_box.setLayout(test_layout)
# 将2个组中添加到最外层布局器中
container.addWidget(group1_box)
container.addWidget(group2_box)
# 设置显示最外层布局器 (布局器的应用)
self.setLayout(container)
# 窗口设置
self.resize(700, 500) # 设置大小
self.setWindowTitle("pyqt5程序") # 窗口标题
if __name__ == '__main__':
app = QApplication(sys.argv) # 接收参数(仅有一个)
w = Windows() # 创建一个窗口(继承了QWindows,并封装为一个类)
w.show() # 展示窗口
sys.exit(app.exec_()) # 程序进入循环等待,并在退出时关闭应用