PyQt入门(五)——布局

1. 绝对定位
from PyQt5.QtWidgets import QLabel

lbl1 = QLabel('Zetcode', self)
lbl1.move(15, 10)

lbl2 = QLabel('tutorials', self)
lbl2.move(35, 40)

lbl3 = QLabel('for programmers', self)
lbl3.move(55, 70)  

绝对定位存在的问题:
1.控件大小和位置不随窗口的大小改变
2.不同平台看起来也许会有不同
3.改变字体也许会影响布局
4.如果决定改变布局,就必需重新布局。

2. 框布局(QBoxLayout)
方法 描述
addLayout(self, QLayout, stretch = 0) 在窗口的右边或下边添加布局
addWidget(self, QWidget, stretch, Qt.Alignment) 在布局中添加控件,伸缩量stretch只适用于QBoxLayout, alignment指定对齐方式
setSpacing(self, int) 设置各控件的上下或左右间距

程序示例:

import sys
from PyQt5.QtWidgets import (QWidget, QPushButton,
                             QHBoxLayout, QVBoxLayout, QApplication)
from PyQt5.QtCore import Qt

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        okButton = QPushButton("OK")
        cancelButton = QPushButton("Cancel")

        hbox = QHBoxLayout() # 水平(Horizontal)布局
        hbox.addStretch(1)
        hbox.addWidget(okButton, 0, Qt.AlignLeft|Qt.AlignTop)
        hbox.addWidget(cancelButton)
        hbox.addWidget(QPushButton('Quit'), 0, Qt.AlignLeft|Qt.AlignBottom)
        hbox.setSpacing(10)

        vbox = QVBoxLayout() # 垂直(Vertical)布局
        vbox.addStretch(2) # 如果要查看对齐方式的效果,把这两行注释掉
        vbox.addLayout(hbox)# 垂直布局下嵌套水平布局
        vbox.addStretch(1) # 如果要查看对齐方式的效果,把这两行注释掉

        self.setLayout(vbox) 

        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('Buttons')
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

释疑addStretch():将按钮之外的所有空间分为对应比例的可伸缩控件,所以无论你要分为几份(哪怕是0份),按钮都会挤在一起(其余所有空间都分为可伸缩控件)

vbox = QVBoxLayout(self)
vbox.addStretch(1)
vbox.addWidget(btn1)
vbox.addStretch(1)
vbox.addWidget(btn2)
vbox.addStretch(2)
vbox.addWidget(btn3)

对于上述程序,呈现的结果应如下图所示:

3. 网格布局(QGridLayout)
方法 描述
addWidget(QWidget, row, col, alignment) 添加到固定的位置,row和col均从0开始
addWidget(QWidget, row, col, rowSpan, colSpan, alignment) 适用于所添加的控件跨越多行或列时,row和col为起始行/列,rowSpan和colSpan为跨越行列数

单一的网格单元格

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


### PyQt简介 PyQt 是一套用于创建图形用户界面(GUI)的工具包,支持Python编程语言。通过PyQt, 开发者能够快速构建功能丰富的桌面应用[^1]。 ### 安装PyQt 为了开始使用PyQt5,在命令行输入如下pip安装指令: ```bash pip install PyQt5 ``` 这会自动下载并安装最新版本的PyQt5及其依赖项。 ### 创建第一个窗口 下面是一个简单的例子来展示如何利用PyQt5建立一个基础的应用程序框架: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget if __name__ == '__main__': app = QApplication(sys.argv) w = QWidget() w.resize(250, 150) w.move(300, 300) w.setWindowTitle('Simple') w.show() sys.exit(app.exec_()) ``` 上述脚本定义了一个名为`w`的小部件(widget),设置了其大小、位置以及标题,并将其显示出来;最后进入主循环等待事件发生。 ### 添加按钮控件 为了让界面更加交互友好,可以在界面上加入按钮(Button): ```python from PyQt5.QtWidgets import QPushButton button = QPushButton("Click Me", parent=w) button.move(75, 75) button.clicked.connect(lambda: print("Button clicked")) ``` 这里创建了一个带有文字标签“Click Me”的按钮实例,并指定它属于哪个父级容器(`parent`)。当点击该按钮时触发连接到槽函数的操作——在这个案例里就是打印一条消息至控制台。 ### 使用布局管理器 手动调整组件的位置和尺寸可能比较麻烦,因此推荐采用布局管理器(Layout Manager)来进行自动化安排子元素间的相对关系: ```python from PyQt5.QtWidgets import QVBoxLayout layout = QVBoxLayout() # 创建垂直方向上的盒子布局 layout.addWidget(button) # 将按钮添加进此布局中 w.setLayout(layout) # 设置当前窗体的整体布局方式为刚才设置好的布局对象 ``` 这样不仅简化了代码量还提高了灵活性,使得后续维护变得更加容易。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值