欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PyQt5——QGridLayout和QFormLayout

程序员文章站 2022-07-13 22:31:07
...

QGridLayout

QGridLayout(网格布局)是将窗口分割成行和列的网络来进行排列,通常可以使用函数addWidget()将被管理的控件添加到窗口中。或者addLayout函数也可以。

单一的网格单元格

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout,QPushButton

class Winform(QWidget):
    def __init__(self,parent = None):
        super(Winform, self).__init__(parent)
        self.initUI()
    def initUI(self):
        grid = QGridLayout()
        self.setLayout(grid)

        names = ['Cls', 'Back', '','Close',
                 '7', '8', '9', '/',
                 '4', '5', '6', '*',
                 '1', '2', '3', '-',
                 '0', '.', '=', '+']
        positions = [(i,j) for i in range(5) for j  in range(4)]
        for position, name in zip(positions,names):
            if names == '':
                continue
            button = QPushButton(name)
            grid.addWidget(button, *position)
        self.move(300,150)
        self.setWindowTitle("网格布局管理例子")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Winform()
    win.show()
    sys.exit(app.exec_())

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hRaiLcci-1571811454697)(assets/1571795720673.png)]

跨越行和列的网格单元格

import sys
from PyQt5.QtWidgets import QWidget,QLabel,QLineEdit,QTextEdit,QGridLayout,QApplication

class Winform(QWidget):
    def __init__(self):
        super(Winform,self).__init__()
        self.initUI()

    def initUI(self):
        title = QLabel("标题")
        author = QLabel("提交人")
        review = QLabel("申告内容")

        titleEdit = QLineEdit()
        authorEdit = QLineEdit()
        reviewEdit = QTextEdit()

        grid = QGridLayout()
        grid.setSpacing(10)
        grid.addWidget(title,1,0)
        grid.addWidget(titleEdit,1,1)

        grid.addWidget(author,2,0)
        grid.addWidget(authorEdit,2,1)

        grid.addWidget(review,3,0)
        # 放置在第3行第1列,跨越5行和1列
        grid.addWidget(reviewEdit,3,1,5,1)
        self.setLayout(grid)
        self.setGeometry(300,300,350,300)
        self.setWindowTitle("故障申告")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Winform()
    win.show()
    sys.exit(app.exec_())

PyQt5——QGridLayout和QFormLayout

QFormLayout(表单布局)

QFormLayout是label-field式的表单布局,就是实现表单方式的布局。表单是提示用户进行交互的一种模式,主要由两列组成,第一列用于显示信息,第二类需要用户进行选择或输入。


import sys
from PyQt5.QtWidgets import QApplication,QWidget,QFormLayout,QLabel,QLineEdit

class Winform(QWidget):
    def __init__(self):
        super(Winform,self).__init__()
        self.setWindowTitle("表单布局管理例子")
        self.resize(400,100)
        fromlayout= QFormLayout()
        labl1 = QLabel("标签1")
        lineEdit1 = QLineEdit()
        labl2 = QLabel("标签2")
        lineEdit2 = QLineEdit()
        labl3 = QLabel("标签3")
        lineEdit3 = QLineEdit()

        fromlayout.addRow(labl1,lineEdit1)
        fromlayout.addRow(labl2,lineEdit2)
        fromlayout.addRow(labl3,lineEdit3)
        self.setLayout(fromlayout)
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Winform()
    win.show()
    sys.exit(app.exec_())

PyQt5——QGridLayout和QFormLayout