PyQt的布局管理(二)

本文介绍在PyQt4中使用Grid Layout布局的方法,演示了如何设置组件的位置和跨度,以及如何在Grid布局中嵌套其它布局。

在使用GRidLayout布局时,其添加组件的有三种方法,方法如下:

 QGridLayout.addWidget(QWidget)
 QGridLayout.addWidget(QWidget, int, int, Qt.Alignment alignment=0)
 QGridLayout.addWidget(QWidget, int, int, int, int, Qt.Alignment alignment=0)

其中四个int类型的参数从左至右分别表示:row(起始行),column(起始列),rowSpan(行跨度),columnSpan(列跨度)

第一个参数为控件名,最后一个参数为对齐方式

下面是组件跨多行多列以及利用QHBoxLayout和QVBoxLayout进行多个布局的的实验

#!/usr/bin/env python
#coding: utf-8


import sys 
from PyQt4 import QtGui

class Space(QtGui.QWidget):
    def __init__(self):
        super(Space, self).__init__()
        self.initUI()
    
    def initUI(self):
        #添加两个按钮,并将他们作为同一个布局
        ok = QtGui.QPushButton('OK',self)
        cancel = QtGui.QPushButton('Cancel',self)    

        button_layout = QtGui.QHBoxLayout()
        button_layout.addWidget(ok)
        button_layout.addWidget(cancel)

        title = QtGui.QLabel('Title')
        author = QtGui.QLabel('Author')
        review = QtGui.QLabel('Review')
        #test = QtGui.QLabel('Test')
    
        titleEdit = QtGui.QLineEdit()
        authorEdit = QtGui.QLineEdit()
        reviewEdit = QtGui.QTextEdit()
    
        grid = QtGui.QGridLayout()
        grid.setSpacing(50)         #像素.应为两个组件之间的距离
    
        grid.addWidget(title,0,0)   #其中注释的两条语句,是为了验证一个想法:行数从0开始,列数从0开始。开始的代码行数为1,让我纠结了好久
        grid.addWidget(titleEdit,0,1)
        #grid.addWidget(test,1,2)
    
        grid.addWidget(author, 1, 0)
        grid.addWidget(authorEdit, 1, 1)
    
        grid.addWidget(review, 2, 0)
        grid.addWidget(reviewEdit, 2, 1, 5, 1)

        #布局中添加子布局,一个是button布局,还有一个是grid布局         
        layout = QtGui.QVBoxLayout()
        layout.addLayout(button_layout)
        layout.addLayout(grid)

        self.setLayout(layout)
        self.setWindowTitle('grid layout')
        self.resize(350, 300)

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Space()
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()



运行结果:


转载于:https://my.oschina.net/yanxiaoshuai/blog/529667

PyQt中,布局管理器是用于组织和排列用户界面中的控件的重要工具。它能够确保控件在不同平台和窗口尺寸下都能正确呈现,并且具有良好的可伸缩性。以下是一些常用的布局管理器及其使用方法: ### 垂直布局(QVBoxLayout) 垂直布局管理器(`QVBoxLayout`)按垂直方向依次排列窗口部件。通过将控件添加到垂直布局中,可以确保它们按照从上到下的顺序排列,并且会随着窗口大小的变化而自动调整。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton app = QApplication(sys.argv) window = QWidget() layout = QVBoxLayout() button1 = QPushButton("Button 1") button2 = QPushButton("Button 2") button3 = QPushButton("Button 3") layout.addWidget(button1) layout.addWidget(button2) layout.addWidget(button3) window.setLayout(layout) window.show() sys.exit(app.exec_()) ``` ### 水平布局(QHBoxLayout) 水平布局管理器(`QHBoxLayout`)按水平方向依次排列窗口部件。通过将控件添加到水平布局中,可以确保它们按照从左到右的顺序排列,并且会随着窗口大小的变化而自动调整。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QHBoxLayout class MyWindow(QWidget): def __init__(self): super().__init__() # 创建按钮 button1 = QPushButton('Button 1') button2 = QPushButton('Button 2') button3 = QPushButton('Button 3') # 创建垂直布局 vbox = QVBoxLayout() vbox.addWidget(button1) vbox.addWidget(button2) # 创建水平布局 hbox = QHBoxLayout() hbox.addWidget(button3) # 将水平布局添加到垂直布局中 vbox.addLayout(hbox) # 设置窗口的布局 self.setLayout(vbox) self.setWindowTitle('Layout Example') self.resize(300, 200) if __name__ == '__main__': app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_()) ``` ### 网格布局(QGridLayout) 网格布局管理器(`QGridLayout`)允许将控件置在一个维网格中。这使得控件可以以行和列的方式进行排列,非常适合用于创建复杂的用户界面。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout app = QApplication(sys.argv) window = QWidget() grid_layout = QGridLayout() button1 = QPushButton("Button 1") button2 = QPushButton("Button 2") button3 = QPushButton("Button 3") button4 = QPushButton("Button 4") grid_layout.addWidget(button1, 0, 0) grid_layout.addWidget(button2, 0, 1) grid_layout.addWidget(button3, 1, 0) grid_layout.addWidget(button4, 1, 1) window.setLayout(grid_layout) window.setWindowTitle('Grid Layout Example') window.show() sys.exit(app.exec_()) ``` ### 动态布局(QSplitter) `QSplitter`是一种动态布局管理器,它允许用户手动调整区域的大小,实现复杂嵌套布局结构,并提供直观的比例控制接口[^2]。这对于需要用户交互调整布局的应用非常有用。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QSplitter, QTextEdit, QPushButton app = QApplication(sys.argv) window = QWidget() splitter = QSplitter() text_edit1 = QTextEdit() text_edit2 = QTextEdit() splitter.addWidget(text_edit1) splitter.addWidget(text_edit2) # 可以添加更多控件 button = QPushButton("Click Me") splitter.addWidget(button) window.setLayout(splitter) window.setWindowTitle('Splitter Layout Example') window.show() sys.exit(app.exec_()) ``` ### 总结 通过使用上述布局管理器,开发者可以根据具体需求创建灵活且专业的用户界面。无论是简单的垂直或水平布局,还是复杂的网格布局或动态布局PyQt都提供了丰富的工具来满足不同的界面设计需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值