博客
关于我
PyQt5教程7:布局Layout管理
阅读量:803 次
发布时间:2023-03-05

本文共 3763 字,大约阅读时间需要 12 分钟。

PyQt5 窗口布局

布局管理是我们如何将小部件放置在应用程序窗口上的方式。在PyQt5中,布局管理是组织小部件的首选方式。绝对定位虽然常用,但存在诸多限制。相比之下,使用布局类(如QHBoxLayout和QGridLayout)更为灵活且高效。

一、绝对定位

绝对定位是以像素为单位指定小部件的位置和大小。其优点是直观,但存在以下限制:

  • 灵活性差:调整窗口大小时,小部件位置和大小不会改变。
  • 平台差异:应用程序在不同平台上可能呈现不同外观。
  • 字体变化:改变字体可能破坏布局。
  • 维护成本高:更改布局需要重新编写整个布局,操作繁琐。
示例:绝对定位小部件

以下是使用绝对定位创建三个标签的示例代码:

import sysfrom PyQt5.QtWidgets import QWidget, QLabel, QApplicationclass Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()        def initUI(self):        self.setGeometry(300, 300, 250, 150)        self.setWindowTitle('Absolute')        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)        self.show()def main():    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())if __name__ == '__main__':    main()

二、QHBoxLayout 布局

QHBoxLayout用于水平排列小部件,常用于将多个控件放置在窗口的底部或顶部。以下示例展示了如何在窗口的右下角放置两个按钮:

import sysfrom PyQt5.QtWidgets import (QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QApplication)class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()        def initUI(self):        okButton = QPushButton("OK")        cancelButton = QPushButton("Cancel")        hbox = QHBoxLayout()        hbox.addStretch(1)        hbox.addWidget(okButton)        hbox.addWidget(cancelButton)        vbox = QVBoxLayout()        vbox.addStretch(1)        vbox.addLayout(hbox)        self.setLayout(vbox)        self.setGeometry(300, 300, 300, 150)        self.setWindowTitle('Buttons')        self.show()def main():    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())if __name__ == '__main__':    main()

三、QGridLayout 布局

QGridLayout 是最通用的布局类,可将空间划分为行和列。以下是创建一个计算器框架的示例:

import sysfrom PyQt5.QtWidgets import (QWidget, QGridLayout, QPushButton, QApplication)class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()        def initUI(self):        grid = QGridLayout()        self.setLayout(grid)        names = ['Cls', 'Bck', '', '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 name == '':                continue            button = QPushButton(name)            grid.addWidget(button, *position)        self.move(300, 150)        self.setWindowTitle('Calculator')        self.show()def main():    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())if __name__ == '__main__':    main()

四、代码案例

在某些情况下,小部件可能跨越多列或多行。以下示例展示了如何在网格布局中创建更复杂的窗口布局:

import sysfrom PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QTextEdit, QGridLayout, QApplication)class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()        def initUI(self):        title = QLabel('Title')        author = QLabel('Author')        review = QLabel('Review')        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)        grid.addWidget(reviewEdit, 3, 1, 5, 1)        self.setLayout(grid)        self.setGeometry(300, 300, 350, 300)        self.setWindowTitle('Review')        self.show()def main():    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())if __name__ == '__main__':    main()

以上示例展示了如何使用PyQt5的不同布局方式来创建灵活的窗口布局。通过合理选择布局类和使用小部件的位置和大小,可以为应用程序设计出理想的用户界面。

转载地址:http://dcafk.baihongyu.com/

你可能感兴趣的文章
python basic programs
查看>>
python bert_gen.py 报错Unable to load weights from pytorch checkpoint file for......
查看>>
python binascii.Error: Incorrect padding
查看>>
Python bool() 函数能否为无效参数引发异常?
查看>>
Python C 程序子进程在“for line in iter“处挂起
查看>>
Python Celery:自动化测试平台定时任务必备的三方库
查看>>
python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令
查看>>
Python CONNECT 4 CHECK WIN函数
查看>>
python cos,Python cos(90)和cos(270)不是0
查看>>
python进阶(4):Python 脚本文件重启自身进程
查看>>
python ctypes库中动态链接库加载方式
查看>>
python cv2 图像( np array )转 HObject
查看>>
python进阶(3):文件操作
查看>>
python cv2截取不规则区域图片
查看>>
python CV2裁剪图片并保存
查看>>
python进阶(2):pyecharts使用
查看>>
python cv2读取rtsp实时码流按时生成连续视频文件
查看>>
Python Dataframe Groupby Mean和Std
查看>>
python datetime
查看>>
python datetime笔记
查看>>