博客
关于我
PyQt5教程7:布局Layout管理
阅读量:796 次
发布时间: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/

你可能感兴趣的文章
Pycharm中基于Ollama和Proxy AI使用本地算力进行AI辅助编程
查看>>
Pycharm中配置项目的打开方式(This Window,New Window)
查看>>
PyCharm为什么这么牛?
查看>>
Pycharm出现 Cannot find declaration to go to 解决方法(全)
查看>>
pycharm出现Can‘t get remote credentials for deployment server 的解决方法
查看>>
pycharm可视化数据库
查看>>
pytorch 中的 #@save的意思
查看>>
Pycharm如何取消自动换行
查看>>
PyCharm安装及使用说明
查看>>
pycharm导入自己写的模块时,模块下方出现红色波浪线的解决方案
查看>>
Pycharm常用快捷键大全
查看>>
PyCharm快捷键
查看>>
Pycharm快捷键记录
查看>>
pycharm怎么支持WPS?
查看>>
pycharm打印不全问题
查看>>
pycharm提示This inspection detects instance attribute definition outside __init__ method
查看>>
pycharm搭建spark环境
查看>>
pycharm无法导入本地模块问题
查看>>
PyTorch — 初学者教程
查看>>
PyCharm更换pip源为国内源、模块安装、PyCharm依赖包导入导出教程
查看>>