zoukankan      html  css  js  c++  java
  • pyqt5学习之布局管理

    使用步骤:1.创建一个布局管理器对象       

         2.直接把布局管理器对象设置给需要布局的父控件

          3.把需要布局的子控件添加到布局管理器当中

    简单实例:

    QBoxlayout:盒子布局

    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle('布局管理器使用')
            self.resize(500,500)
            self.setup_ui()
    
        def setup_ui(self):
            label1 = QLabel('标签1')
            label1.setStyleSheet('background-color: cyan;')
            label2 = QLabel('标签2')
            label2.setStyleSheet('background-color: yellow;')
            label3 = QLabel('标签3')
            label3.setStyleSheet('background-color: red;')
    
            # 1.创建一个布局管理器对象
            V_layout = QVBoxLayout()  # 垂直布局
            # H_layout = QHBoxLayout()  # 水平布局
            # 2.直接把布局管理器对象设置给需要布局的父控件
            self.setLayout(V_layout)
            # 3.把需要布局的子控件添加到布局管理器当中
            V_layout.addWidget(label1)
            V_layout.addWidget(label2)
            V_layout.addWidget(label3)
    
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
    
        window = Window()
    
        window.show()
        sys.exit(app.exec_())
    View Code
    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle('布局管理器使用')
            self.resize(500,500)
            self.setup_ui()
    
        def setup_ui(self):
            label1 = QLabel('标签1')
            label1.setStyleSheet('background-color: cyan;')
            label2 = QLabel('标签2')
            label2.setStyleSheet('background-color: yellow;')
            label3 = QLabel('标签3')
            label3.setStyleSheet('background-color: red;')
    
            # 1.创建一个布局管理器对象
            V_layout = QVBoxLayout()  # 垂直布局
            # H_layout = QHBoxLayout()  # 水平布局
            # 2.直接把布局管理器对象设置给需要布局的父控件
            self.setLayout(V_layout)
            # 3.把需要布局的子控件添加到布局管理器当中
            V_layout.addWidget(label1)
            V_layout.addWidget(label2)
            V_layout.addWidget(label3)
    
    
            V_layout.setContentsMargins(20,30,40,50)  # setContentsMargins:调整子控件在父控件的外边距;参数:左,上,右,下
    
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
    
        window = Window()
    
        window.show()
        sys.exit(app.exec_())
    setContentsMargins
    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle('布局管理器使用')
            self.resize(500,500)
            self.setup_ui()
    
        def setup_ui(self):
            label1 = QLabel('标签1')
            label1.setStyleSheet('background-color: cyan;')
            label2 = QLabel('标签2')
            label2.setStyleSheet('background-color: yellow;')
            label3 = QLabel('标签3')
            label3.setStyleSheet('background-color: red;')
    
            # 1.创建一个布局管理器对象
            V_layout = QVBoxLayout()  # 垂直布局
            # H_layout = QHBoxLayout()  # 水平布局
            # 2.直接把布局管理器对象设置给需要布局的父控件
            self.setLayout(V_layout)
            # 3.把需要布局的子控件添加到布局管理器当中
            V_layout.addWidget(label1)
            V_layout.addWidget(label2)
            V_layout.addWidget(label3)
    
    
            V_layout.setSpacing(20)  # setSpacing:调整子控件相邻内边距
    
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
    
        window = Window()
    
        window.show()
        sys.exit(app.exec_())
    setSpacing
    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle('布局管理器使用')
            self.resize(500,500)
            self.setup_ui()
    
        def setup_ui(self):
            label1 = QLabel('标签1')
            label1.setStyleSheet('background-color: cyan;')
            label2 = QLabel('标签2')
            label2.setStyleSheet('background-color: yellow;')
            label3 = QLabel('标签3')
            label3.setStyleSheet('background-color: red;')
    
            # 1.创建一个布局管理器对象
            H_layout = QHBoxLayout()  # 垂直布局
            # H_layout = QHBoxLayout()  # 水平布局
            # 2.直接把布局管理器对象设置给需要布局的父控件
            self.setLayout(H_layout)
            # 3.把需要布局的子控件添加到布局管理器当中
            H_layout.addWidget(label1)
            H_layout.addWidget(label2)
            H_layout.addWidget(label3)
    
    
            self.setLayoutDirection(Qt.RightToLeft)  # setLayoutDirection:调整子控布局方向
    
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
    
        window = Window()
    
        window.show()
        sys.exit(app.exec_())
    setLayoutDirection
    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle('布局管理器使用')
            self.resize(500,500)
            self.setup_ui()
    
        def setup_ui(self):
            label1 = QLabel('标签1')
            label1.setStyleSheet('background-color: cyan;')
            label2 = QLabel('标签2')
            label2.setStyleSheet('background-color: yellow;')
            label3 = QLabel('标签3')
            label3.setStyleSheet('background-color: red;')
            label4 = QLabel('标签4')
            label4.setStyleSheet('background-color: blue;')
    
            # 1.创建一个布局管理器对象
            H_layout = QHBoxLayout()  # 垂直布局
            # H_layout = QHBoxLayout()  # 水平布局
            # 2.直接把布局管理器对象设置给需要布局的父控件
            self.setLayout(H_layout)
            # 3.把需要布局的子控件添加到布局管理器当中
            H_layout.addWidget(label1)
            H_layout.addWidget(label2)
            H_layout.addWidget(label3)
    
            H_layout.replaceWidget(label2,label4)  # replaceWidget:替换控件;被替换在前
            label2.hide()# 被替换的要隐藏,因为没有删除该控件
            self.setLayoutDirection(Qt.RightToLeft)  # setLayoutDirection:调整子控布局方向
    
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
    
        window = Window()
    
        window.show()
        sys.exit(app.exec_())
    replaceWidget

    布局嵌套

    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle('布局管理器使用')
            self.resize(500,500)
            self.setup_ui()
    
        def setup_ui(self):
            label1 = QLabel('标签1')
            label1.setStyleSheet('background-color: cyan;')
            label2 = QLabel('标签2')
            label2.setStyleSheet('background-color: yellow;')
            label3 = QLabel('标签3')
            label3.setStyleSheet('background-color: red;')
            label4 = QLabel('标签4')
            label4.setStyleSheet('background-color: blue;')
    
            # 1.创建一个布局管理器对象
            H_layout = QVBoxLayout()  # 垂直布局
            # H_layout = QHBoxLayout()  # 水平布局
            # 2.直接把布局管理器对象设置给需要布局的父控件
            self.setLayout(H_layout)
    
    
    
            # 布局的嵌套
            label5 = QLabel("标签5")
            label5.setStyleSheet("background-color: pink;")
            label6 = QLabel("标签6")
            label6.setStyleSheet("background-color: blue;")
            label7 = QLabel("标签7")
            label7.setStyleSheet("background-color: cyan;")
    
            V_layout = QBoxLayout(QBoxLayout.LeftToRight)
            V_layout.addWidget(label5)
            V_layout.addWidget(label6)
            V_layout.addWidget(label7)
    
            # 3.把需要布局的子控件添加到布局管理器当中
            H_layout.addWidget(label1)
            H_layout.addLayout(V_layout)  # 讲需要嵌套的子控件放在父嵌套中
            H_layout.addWidget(label2)
            H_layout.addWidget(label3)
    
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
    
        window = Window()
    
        window.show()
        sys.exit(app.exec_())
    addLayout
    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle('布局管理器使用')
            self.resize(500,500)
            self.setup_ui()
    
        def setup_ui(self):
            label1 = QLabel('标签1')
            label1.setStyleSheet('background-color: cyan;')
            label2 = QLabel('标签2')
            label2.setStyleSheet('background-color: yellow;')
            label3 = QLabel('标签3')
            label3.setStyleSheet('background-color: red;')
            label4 = QLabel('标签4')
            label4.setStyleSheet('background-color: blue;')
    
            # 1.创建一个布局管理器对象
            H_layout = QVBoxLayout()  # 垂直布局
            # H_layout = QHBoxLayout()  # 水平布局
            # 2.直接把布局管理器对象设置给需要布局的父控件
            self.setLayout(H_layout)
    
    
    
            # 布局的嵌套
            label5 = QLabel("标签5")
            label5.setStyleSheet("background-color: pink;")
            label6 = QLabel("标签6")
            label6.setStyleSheet("background-color: blue;")
            label7 = QLabel("标签7")
            label7.setStyleSheet("background-color: cyan;")
    
            V_layout = QBoxLayout(QBoxLayout.LeftToRight)
            V_layout.addWidget(label5)
            V_layout.addWidget(label6)
            V_layout.addWidget(label7)
    
            # 3.把需要布局的子控件添加到布局管理器当中
            H_layout.addWidget(label1)
            H_layout.insertLayout(2,V_layout)  # 讲需要嵌套的子控件插入父嵌套2后面
            H_layout.addWidget(label2)
            H_layout.addWidget(label3)
    
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
    
        window = Window()
    
        window.show()
        sys.exit(app.exec_())
    insertLayout

    给定控件之间增加空白

    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle('布局管理器使用')
            self.resize(500,500)
            self.setup_ui()
    
        def setup_ui(self):
            label1 = QLabel('标签1')
            label1.setStyleSheet('background-color: cyan;')
            label2 = QLabel('标签2')
            label2.setStyleSheet('background-color: yellow;')
            label3 = QLabel('标签3')
            label3.setStyleSheet('background-color: red;')
            label4 = QLabel('标签4')
            label4.setStyleSheet('background-color: blue;')
    
            # 1.创建一个布局管理器对象
            H_layout = QVBoxLayout()  # 垂直布局
            # H_layout = QHBoxLayout()  # 水平布局
            # 2.直接把布局管理器对象设置给需要布局的父控件
            self.setLayout(H_layout)
    
    
    
            # 布局的嵌套
            label5 = QLabel("标签5")
            label5.setStyleSheet("background-color: pink;")
            label6 = QLabel("标签6")
            label6.setStyleSheet("background-color: blue;")
            label7 = QLabel("标签7")
            label7.setStyleSheet("background-color: cyan;")
    
            V_layout = QBoxLayout(QBoxLayout.LeftToRight)
            V_layout.addWidget(label5)
            V_layout.addWidget(label6)
            V_layout.addWidget(label7)
    
            # 3.把需要布局的子控件添加到布局管理器当中
            H_layout.addWidget(label1)
            H_layout.addSpacing(100)  # addSpacing:给需要的控件之间增加空白
            H_layout.addWidget(label2)
            H_layout.addWidget(label3)
    
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
    
        window = Window()
    
        window.show()
        sys.exit(app.exec_())
    addSpacing

    伸缩因子

    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle('布局管理器使用')
            self.resize(500,500)
            self.setup_ui()
    
        def setup_ui(self):
            label1 = QLabel('标签1')
            label1.setStyleSheet('background-color: cyan;')
            label2 = QLabel('标签2')
            label2.setStyleSheet('background-color: yellow;')
            label3 = QLabel('标签3')
            label3.setStyleSheet('background-color: red;')
            label4 = QLabel('标签4')
            label4.setStyleSheet('background-color: blue;')
    
            # 1.创建一个布局管理器对象
            H_layout = QVBoxLayout()  # 垂直布局
            # H_layout = QHBoxLayout()  # 水平布局
            # 2.直接把布局管理器对象设置给需要布局的父控件
            self.setLayout(H_layout)
    
    
    
            # 布局的嵌套
            label5 = QLabel("标签5")
            label5.setStyleSheet("background-color: pink;")
            label6 = QLabel("标签6")
            label6.setStyleSheet("background-color: blue;")
            label7 = QLabel("标签7")
            label7.setStyleSheet("background-color: cyan;")
    
            V_layout = QBoxLayout(QBoxLayout.LeftToRight)
            V_layout.addWidget(label5)
            V_layout.addWidget(label6)
            V_layout.addWidget(label7)
    
            # 3.把需要布局的子控件添加到布局管理器当中
            H_layout.addWidget(label1,1)# H_layout.addWidget(label1,1)第二个参数即为伸缩因子
            H_layout.addStretch(1)  # addStretch:伸缩因子
            H_layout.addWidget(label2,1)
            H_layout.addWidget(label3,1)
    
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
    
        window = Window()
    
        window.show()
        sys.exit(app.exec_())
    addStretch

    QformLayout:表单布局

    添加行

    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle("QFormLayout的学习")
            self.resize(500,500)
            self.setup_ui()
    
        def setup_ui(self):
            name_label = QLabel("姓名(&n):")
            age_label = QLabel("年龄(&g):")
    
            name_le = QLineEdit()
            age_sb = QSpinBox()
    
            name_label.setBuddy(name_le)
            age_label.setBuddy(age_sb)
    
            sex_label = QLabel("性别")
            male_rb = QRadioButton("")
            female_rb = QRadioButton("")
            h_layout = QHBoxLayout()
            h_layout.addWidget(male_rb)
            h_layout.addWidget(female_rb)
    
            submit_btn = QPushButton("提交")
    
            # 1. 创建布局管理器
            layout = QFormLayout()
    
            # 2. 把布局管理器赋值给需要布局的父控件
            self.setLayout(layout)
    
            # 3. 把需要布局的子控件交给布局管理器进行布局
            # layout.addRow(name_label, name_le)
            layout.addRow("姓名(&n)", name_le)  # addRow添加行
            layout.addRow(sex_label, h_layout)
            # layout.addRow("性别:", h_layout)
            layout.addRow(age_label, age_sb)
            # layout.addRow("年龄(&g)", age_sb)
            layout.addRow(submit_btn)
    
    
    
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
    
        window = Window()
    
        window.show()
        sys.exit(app.exec_())
    addRow
  • 相关阅读:
    ZOJ 1002 Fire Net
    Uva 12889 One-Two-Three
    URAL 1881 Long problem statement
    URAL 1880 Psych Up's Eigenvalues
    URAL 1877 Bicycle Codes
    URAL 1876 Centipede's Morning
    URAL 1873. GOV Chronicles
    Uva 839 Not so Mobile
    Uva 679 Dropping Balls
    An ac a day,keep wa away
  • 原文地址:https://www.cnblogs.com/mosewumo/p/12488779.html
Copyright © 2011-2022 走看看