• PyQt5学习笔记--GridLayout、FormLayout和StackedLayout布局


    目录

    1--GridLayout布局

    2--FormLayout布局

    3--StackedLayout布局


    1--GridLayout布局

    1. import sys
    2. from PyQt5.QtWidgets import *
    3. class MyWindow(QWidget):
    4. def __init__(self):
    5. super().__init__()
    6. self.init_ui()
    7. def init_ui(self):
    8. self.setWindowTitle("Calculator")
    9. # 准备数据
    10. data = {
    11. 0:["7", "8", "9", "+", "("],
    12. 1:["4", "5", "6", "-", ")"],
    13. 2:["1", "2", "3", "*", "<-"],
    14. 3:["0", ".", "=", "/", "C"]
    15. }
    16. # 整体垂直布局
    17. layout = QVBoxLayout()
    18. # 输入框
    19. edit = QLineEdit()
    20. edit.setPlaceholderText("请输入内容")
    21. # 把输入框添加到容器中
    22. layout.addWidget(edit)
    23. # 网格布局
    24. grid = QGridLayout()
    25. # 循环创建
    26. for line_number, line_data in data.items():
    27. for col_number, number in enumerate(line_data):
    28. btn = QPushButton(number)
    29. grid.addWidget(btn, line_number, col_number)
    30. # 网格布局追加到容器当中
    31. layout.addLayout(grid)
    32. self.setLayout(layout)
    33. if __name__ == "__main__":
    34. app = QApplication(sys.argv) # 创建对象
    35. w = MyWindow()
    36. w.show()
    37. # 程序进行循环等待状态
    38. app.exec_()

    2--FormLayout布局

    1. import sys
    2. from PyQt5.QtCore import Qt
    3. from PyQt5.QtWidgets import *
    4. class MyWindow(QWidget):
    5. def __init__(self):
    6. super().__init__()
    7. self.init_ui()
    8. def init_ui(self):
    9. # 固定宽高
    10. self.setFixedSize(300, 150)
    11. # 外层容器
    12. container = QVBoxLayout()
    13. # 表单容器
    14. form_layout = QFormLayout()
    15. # 创建1个输入框
    16. edit = QLineEdit()
    17. edit.setPlaceholderText("请输入账号")
    18. form_layout.addRow("账号:", edit)
    19. # 创建另外一个输入框
    20. edit2 = QLineEdit()
    21. edit2.setPlaceholderText("请输入密码")
    22. form_layout.addRow("密码:", edit2)
    23. # 将from_layout添加到垂直布局中
    24. container.addLayout(form_layout)
    25. # 按钮
    26. login_btn = QPushButton("登录")
    27. login_btn.setFixedSize(100, 30)
    28. # 将按钮添加到容器中,并指定其对齐方式
    29. container.addWidget(login_btn, alignment=Qt.AlignRight)
    30. self.setLayout(container)
    31. if __name__ == "__main__":
    32. app = QApplication(sys.argv) # 创建对象
    33. w = MyWindow()
    34. w.show()
    35. # 程序进行循环等待状态
    36. app.exec_()

    3--StackedLayout布局

    1. import sys
    2. from PyQt5.QtCore import Qt
    3. from PyQt5.QtWidgets import *
    4. class Window1(QWidget):
    5. def __init__(self):
    6. super().__init__()
    7. QLabel("界面1要显示的内容", self)
    8. self.setStyleSheet("background-color:green;")
    9. class Window2(QWidget):
    10. def __init__(self):
    11. super().__init__()
    12. QLabel("界面2要显示的内容", self)
    13. self.setStyleSheet("background-color:red;")
    14. class MyWindow(QWidget):
    15. def __init__(self):
    16. super().__init__()
    17. self.create_stacked_layout()
    18. self.init_ui()
    19. def create_stacked_layout(self):
    20. # 创建堆栈(抽屉)布局
    21. self.stacked_layout = QStackedLayout()
    22. win1 = Window1()
    23. win2 = Window2()
    24. # 将创建的2个Widget添加到抽屉布局器中
    25. self.stacked_layout.addWidget(win1) # index0
    26. self.stacked_layout.addWidget(win2) # index1
    27. def init_ui(self):
    28. # 固定Widget大小
    29. self.setFixedSize(300, 270)
    30. # 1-创建整体的布局器
    31. container = QVBoxLayout()
    32. # 2-创建1个要显示具体内容的子Widget
    33. widget = QWidget()
    34. widget.setLayout(self.stacked_layout)
    35. widget.setStyleSheet("background-color:grey;")
    36. # 3-创建两个button, 用于点击进行切换抽屉布局器中的Widget
    37. btn_press1 = QPushButton("抽屉1")
    38. btn_press2 = QPushButton("抽屉2")
    39. # 给按钮添加事件(即点击后要调用的函数)
    40. btn_press1.clicked.connect(self.btn_press1_clicked)
    41. btn_press2.clicked.connect(self.btn_press2_clicked)
    42. # 4-将需要显示的空间添加到布局器中
    43. container.addWidget(widget)
    44. container.addWidget(btn_press1)
    45. container.addWidget(btn_press2)
    46. # 5-设置当前要显示的Widget,从而能够显示这个布局器中的控件
    47. self.setLayout(container)
    48. def btn_press1_clicked(self):
    49. # 设置抽屉布局器的当前索引值,即可切换显示哪个Widget
    50. self.stacked_layout.setCurrentIndex(0)
    51. def btn_press2_clicked(self):
    52. self.stacked_layout.setCurrentIndex(1)
    53. if __name__ == "__main__":
    54. app = QApplication(sys.argv) # 创建对象
    55. w = MyWindow()
    56. w.show()
    57. # 程序进行循环等待状态
    58. app.exec_()

     

     

  • 相关阅读:
    [Java]深入剖析常见排序
    风电场视频监控:如何实现风电场可视化、智慧化管理模式?
    【RT学习笔记1】RT-Thread外设例程——I/O口控制(高低电平、中断)
    js基础笔记学习280蛇流畅运动
    Jenkins插件Parameterized Scheduler用法
    MojoTween:使用「Burst、Jobs、Collections、Mathematics」优化实现的Unity顶级「Tween动画引擎」
    Docker与VM虚拟机的区别以及Docker的特点
    【云原生|探索 Kubernetes 系列 5】简化 Kubernetes 的部署,深入解析其工作流程
    XML的写法
    java.lang.instrument.Instrumentation文档翻译
  • 原文地址:https://blog.csdn.net/weixin_43863869/article/details/127989805