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 (
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值