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

 

posted @ 2020-03-13 20:26  墨色无墨  阅读(278)  评论(0编辑  收藏  举报