『pyqt5 从0基础开始项目实战』02. 页面布局设计(保姆级图文)

这篇具有很好参考价值的文章主要介绍了『pyqt5 从0基础开始项目实战』02. 页面布局设计(保姆级图文)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中
欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中

弹性布局介绍

当然你也可以用可视化工具designer设计ui然后转为为py文件,本专栏注重学习基础,就不再做这方面的介绍了。

并不是采用安卓开发中的绝对定位布局(画坐标系,按照x,y坐标布局,这样很容易因为空间的大小造成重叠控件等问题)

一般设计思路是首先窗口整体是垂直布局,然后每一行是水平布局,在每一行内部通过空白占位的弹簧设置各个控件的位置。
pyqt5分页布局,# pyqt5 从0基础开始项目实战,python,qt,ui,python,pyqt5,毕业设计


导包和框架代码

在上一文的基础框架上加入了本节需要用到的包

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget, QHBoxLayout, QVBoxLayout
from PyQt5.QtWidgets import QPushButton, QLineEdit, QTableWidget, QTableWidgetItem, QLabel

class MainWindow(QWidget):
    def __init__(self):
        # 用super 继承父类的初始化
        super().__init__()

        # 设置窗口的窗体标题
        self.setWindowTitle('发现你走远了的xx系统')

        # 设置窗体的尺寸
        self.resize(1000, 450)

        # 设置窗体位置
        #获取整个窗口部分的宽高和左上角坐标信息,返回值是一个QRect类型,(x,y width,height)
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()#得到屏幕中间的位置信息
        qr.moveCenter(cp)#让我们的窗体移动到屏幕中间


if __name__ == '__main__':
    app = QApplication(sys.argv)#实例化一个Application应用,所有的窗口均在其下运行

    window = MainWindow()  # 实例化窗口对象
    window.show()  # 窗口展示

    sys.exit(app.exec_())
    # app.exec_()运行主循环,并在退出时返回状态代码。
    # sys.exit(n)退出您的应用程序并返回n到父进程(通常是您的shell)

布局框架搭建

我们的窗口布局下有4个部分的子布局

1. 总体布局框架

pyqt5分页布局,# pyqt5 从0基础开始项目实战,python,qt,ui,python,pyqt5,毕业设计

        # 创建窗口总布局
        layout = QVBoxLayout()

        # 1.顶部菜单布局
        header_layout = QHBoxLayout()  # 创建顶部菜单布局
        layout.addLayout(header_layout)  # 将顶部菜单布局添加到总布局

        # 2.添加内容布局
        form_layout = QHBoxLayout()  # 创建添加内容布局
        layout.addLayout(form_layout)  # 将添加内容布局添加到总布局

        # 3.表格数据展示布局
        table_layout = QHBoxLayout()
        layout.addLayout(table_layout)

        # 4.底部菜单
        footer_layout = QHBoxLayout()
        layout.addLayout(footer_layout)

        # 给窗体设置元素的排列方式
        self.setLayout(layout)
  • 不要忘记最后给窗体设置元素的排列方式(不然布局不会生效,我一开始学找了半天的bug······)
    • self.setLayout(layout)

2. 顶部菜单布局

pyqt5分页布局,# pyqt5 从0基础开始项目实战,python,qt,ui,python,pyqt5,毕业设计
顶部菜单布局代码修改为:

        # 1.顶部菜单布局
        header_layout = QHBoxLayout()  # 创建顶部菜单布局
        # 1.1 放入按钮
        btn_start =QPushButton("开始")#新建一个开始按钮
        header_layout.addWidget(btn_start)#将开始按钮添加到顶部菜单布局
        btn_stop =QPushButton("停止")#新建一个开始按钮
        header_layout.addWidget(btn_stop)#将开始按钮添加到顶部菜单布局
        # 1.2 加入弹簧
        header_layout.addStretch()
        layout.addLayout(header_layout)  # 将顶部菜单布局添加到总布局

pyqt5分页布局,# pyqt5 从0基础开始项目实战,python,qt,ui,python,pyqt5,毕业设计

3. form添加内容布局

        # 2.添加内容布局
        form_layout = QHBoxLayout()  # 创建添加内容布局

        # 2.1 输入框
        txt_asin=QLineEdit()#新建一个输入框对象
        txt_asin.setText("B07YN82X3B=100")#设置默认的form数据
        txt_asin.setPlaceholderText("请输入商品ID和价格,例如:B0818JJQQ8=88")#设置灰色的提示信息
        form_layout.addWidget(txt_asin)#将输入框加入到布局中

        # 2.2 添加按钮
        btn_add = QPushButton("添加")#新建一个添加按钮
        form_layout.addWidget(btn_add)#将添加按钮添加到form布局

        layout.addLayout(form_layout)  # 将添加内容布局添加到总布局

pyqt5分页布局,# pyqt5 从0基础开始项目实战,python,qt,ui,python,pyqt5,毕业设计
pyqt5分页布局,# pyqt5 从0基础开始项目实战,python,qt,ui,python,pyqt5,毕业设计

4. table数据展示布局

因为表格比较多,修改一下前文提到的窗体尺寸

        # 窗体的尺寸
        self.resize(1228, 450)
  • 给表格添加单个行索引或者列索引的值
        # 3.表格数据展示布局
        table_layout = QHBoxLayout()
        # 3.1 创建表格
        table_widget=QTableWidget(2,8)#新建一个2行8列的表格

        # 修改表格索引名
        item=QTableWidgetItem()
        item.setText("标题0")
        table_widget.setHorizontalHeaderItem(0,item)
        table_widget.setColumnWidth(0,150)#设置水平单元格0号位置的宽度 150


        item2=QTableWidgetItem()
        item2.setText("网址1")
        table_widget.setHorizontalHeaderItem(1,item2)
        table_widget.setColumnWidth(1,400)#设置水平单元格1号位置的宽度 400

        item3=QTableWidgetItem()
        item3.setText("行索引0")
        table_widget.setVerticalHeaderItem(0,item3)
        table_layout.addWidget(table_widget)#把表格添加到表格布局中

        layout.addLayout(table_layout)

pyqt5分页布局,# pyqt5 从0基础开始项目实战,python,qt,ui,python,pyqt5,毕业设计

  • 给表格批量添加行索引 列索引的值,通过字典键值对和循环实现,不会用enumerate循环的话也可以用for循环代替

  • 注意新建表格的时候,因为没有数据,所以新建0行的表格

# 3.表格数据展示布局
        table_layout = QHBoxLayout()
        # 3.1 创建表格
        table_widget=QTableWidget(0,8)#新建一个0行2列的表格

        table_header = [
            {"field": "asin", "text": "ASIN", 'width': 120},
            {"field": "title", "text": "标题", 'width': 150},
            {"field": "url", "text": "URL", 'width': 400},
            {"field": "price", "text": "底价", 'width': 100},
            {"field": "success", "text": "成功次数", 'width': 100},
            {"field": "error", "text": "503次数", 'width': 100},
            {"field": "status", "text": "状态", 'width': 100},
            {"field": "frequency", "text": "频率(N秒/次)", 'width': 100},
        ]
        for idx,info in enumerate(table_header):
            item=QTableWidgetItem()
            item.setText(info['text'])
            table_widget.setHorizontalHeaderItem(idx,item)
            table_widget.setColumnWidth(idx,info['width'])

        table_layout.addWidget(table_widget)#把表格添加到表格布局中

        layout.addLayout(table_layout)

pyqt5分页布局,# pyqt5 从0基础开始项目实战,python,qt,ui,python,pyqt5,毕业设计

5. footer底部菜单

        # 4.底部菜单
        footer_layout = QHBoxLayout()

        label_status = QLabel("未检测", self)
        footer_layout.addWidget(label_status)

        footer_layout.addStretch()#添加弹簧,更加美观

        btn_reset = QPushButton("重新初始化")
        footer_layout.addWidget(btn_reset)

        btn_recheck = QPushButton("重新检测")
        footer_layout.addWidget(btn_recheck)

        btn_reset_count = QPushButton("次数清零")
        footer_layout.addWidget(btn_reset_count)

        btn_delete = QPushButton("删除检测项")
        footer_layout.addWidget(btn_delete)

        btn_alert = QPushButton("SMTP报警配置")
        footer_layout.addWidget(btn_alert)

        btn_proxy = QPushButton("代理IP")
        footer_layout.addWidget(btn_proxy)

        layout.addLayout(footer_layout)

我们在没有新增弹簧时,所有的按钮平均宽度。
pyqt5分页布局,# pyqt5 从0基础开始项目实战,python,qt,ui,python,pyqt5,毕业设计
新增宽度后,按钮会自适应文本内容,相对而言更加美观
pyqt5分页布局,# pyqt5 从0基础开始项目实战,python,qt,ui,python,pyqt5,毕业设计


完整项目代码

import os
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget, QHBoxLayout, QVBoxLayout
from PyQt5.QtWidgets import QPushButton, QLineEdit, QTableWidget, QTableWidgetItem, QLabel


class MainWindow(QWidget):
    def __init__(self):
        # 用super 继承父类的初始化
        super().__init__()

        # 设置窗口的窗体标题
        self.setWindowTitle('发现你走远了的xx系统')

        # 设置窗体的尺寸
        self.resize(1228, 450)

        # 设置窗体位置
        # 获取整个窗口部分的宽高和左上角坐标信息,返回值是一个QRect类型,(x,y width,height)
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()  # 得到屏幕中间的位置信息
        qr.moveCenter(cp)  # 让我们的窗体移动到屏幕中间

        # 创建窗口总布局
        layout = QVBoxLayout()

        # 1.顶部菜单布局
        header_layout = QHBoxLayout()  # 创建顶部菜单布局
        # 1.1 放入按钮
        btn_start =QPushButton("开始")#新建一个开始按钮
        header_layout.addWidget(btn_start)#将开始按钮添加到顶部菜单布局
        btn_stop =QPushButton("停止")#新建一个开始按钮
        header_layout.addWidget(btn_stop)#将开始按钮添加到顶部菜单布局
        # 1.2 加入弹簧
        header_layout.addStretch()
        layout.addLayout(header_layout)  # 将顶部菜单布局添加到总布局

        # 2.添加内容布局
        form_layout = QHBoxLayout()  # 创建添加内容布局

        # 2.1 输入框
        txt_asin=QLineEdit()#新建一个输入框对象
        txt_asin.setText("B07YN82X3B=100")#设置默认的form数据
        txt_asin.setPlaceholderText("请输入商品ID和价格,例如:B0818JJQQ8=88")#设置灰色的提示信息
        form_layout.addWidget(txt_asin)#将输入框加入到布局中

        # 2.2 添加按钮
        btn_add = QPushButton("添加")#新建一个添加按钮
        form_layout.addWidget(btn_add)#将添加按钮添加到form布局

        layout.addLayout(form_layout)  # 将添加内容布局添加到总布局

        # 3.表格数据展示布局
        table_layout = QHBoxLayout()
        # 3.1 创建表格
        table_widget=QTableWidget(0,8)#新建一个0行8列的表格

        # # 修改表格索引名
        # item=QTableWidgetItem()
        # item.setText("标题0")
        # table_widget.setHorizontalHeaderItem(0,item)
        # table_widget.setColumnWidth(0,150)#设置水平单元格0号位置的宽度 150
        #
        # item2=QTableWidgetItem()
        # item2.setText("网址1")
        # table_widget.setHorizontalHeaderItem(1,item2)
        # table_widget.setColumnWidth(1,400)#设置水平单元格1号位置的宽度 400
        #
        # item3=QTableWidgetItem()
        # item3.setText("行索引0")
        # table_widget.setVerticalHeaderItem(0,item3)

        table_header = [
            {"field": "asin", "text": "ASIN", 'width': 120},
            {"field": "title", "text": "标题", 'width': 150},
            {"field": "url", "text": "URL", 'width': 400},
            {"field": "price", "text": "底价", 'width': 100},
            {"field": "success", "text": "成功次数", 'width': 100},
            {"field": "error", "text": "503次数", 'width': 100},
            {"field": "status", "text": "状态", 'width': 100},
            {"field": "frequency", "text": "频率(N秒/次)", 'width': 100},
        ]
        for idx,info in enumerate(table_header):
            item=QTableWidgetItem()
            item.setText(info['text'])
            table_widget.setHorizontalHeaderItem(idx,item)
            table_widget.setColumnWidth(idx,info['width'])

        table_layout.addWidget(table_widget)#把表格添加到表格布局中

        layout.addLayout(table_layout)

        # 4.底部菜单
        footer_layout = QHBoxLayout()

        label_status = QLabel("未检测", self)
        footer_layout.addWidget(label_status)

        footer_layout.addStretch()#添加弹簧,更加美观

        btn_reset = QPushButton("重新初始化")
        footer_layout.addWidget(btn_reset)

        btn_recheck = QPushButton("重新检测")
        footer_layout.addWidget(btn_recheck)

        btn_reset_count = QPushButton("次数清零")
        footer_layout.addWidget(btn_reset_count)

        btn_delete = QPushButton("删除检测项")
        footer_layout.addWidget(btn_delete)

        btn_alert = QPushButton("SMTP报警配置")
        footer_layout.addWidget(btn_alert)

        btn_proxy = QPushButton("代理IP")
        footer_layout.addWidget(btn_proxy)

        layout.addLayout(footer_layout)



        # 给窗体设置元素的排列方式
        self.setLayout(layout)



if __name__ == '__main__':
    app = QApplication(sys.argv)  # 实例化一个Application应用,所有的窗口均在其下运行

    window = MainWindow()  # 实例化窗口对象
    window.show()  # 窗口展示

    sys.exit(app.exec_())
    # app.exec_()运行主循环,并在退出时返回状态代码。
    # sys.exit(n)退出您的应用程序并返回n到父进程(通常是您的shell)


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中
欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中
『未完待续』文章来源地址https://www.toymoban.com/news/detail-814696.html


到了这里,关于『pyqt5 从0基础开始项目实战』02. 页面布局设计(保姆级图文)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyQt5桌面应用开发(10):界面布局基本支持

    PyQt5桌面应用开发(1):需求分析 PyQt5桌面应用开发(2):事件循环 PyQt5桌面应用开发(3):并行设计 PyQt5桌面应用开发(4):界面设计 PyQt5桌面应用开发(5):对话框 PyQt5桌面应用开发(6):文件对话框 PyQt5桌面应用开发(7):文本编辑+语法高亮与行号 PyQt5桌面应用开

    2024年02月03日
    浏览(37)
  • 【pyqt5界面化开发-5】网格布局(九宫格)界面

    需要模块:QGridLayout 代码

    2024年02月11日
    浏览(39)
  • 人脸识别系统OpenCV+dlib+python(含数据库)Pyqt5界面设计 项目源码 毕业设计

    Python语言、dlib、OpenCV、Pyqt5界面设计、sqlite3数据库      本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量,如果两张图片来源于同一个人,那么两个图片所映射的空间向量距离就很近,否则就会很远。因此,可以通过提取图片并

    2024年02月05日
    浏览(68)
  • Pyside6/PyQT 项目实战,从0开始写一个GUI可视化项目:总览

    最近使用 Pyside6 编写了几个 GUI 工具,发现效果出奇的好。遂产生了分享它的念头。 接下来如果不出意外,大概没有意外,我会开始写 这个专栏 ,介绍从零开始去编写一个实用的 GUI 工具。 这是 Pyside6 第一篇:《总览》 本文对Pyside6在开发使用中进行了知识点的提炼,所以后

    2023年04月22日
    浏览(67)
  • python pyqt5与opencv 遇到的那些坑,pyqt5页面搭建,设置pyqt5设置背景图

    设置pyqt5的背景图片,可以设置一个lable控件,将控件至于底层,然后设置他的背景图 注意路径 解决代码 使用Qt Desiggnei 绘制界面后转换成py代码后 最好不要在生成的py页面代码添加 信号槽,到时候页面改动比较麻烦 转换代码 pyuic5 -o 【转换后的.py】 【UI界面的.ui】 推荐的方

    2024年02月09日
    浏览(59)
  • 『PyQt5-Qt Designer篇』| 06 Qt Designer中水平布局和垂直布局的使用

    拖动几个按钮: 选中这几个按钮, 右键-布局-水平布局 : 可以看到按钮间隔等宽水平排列:

    2024年02月10日
    浏览(49)
  • PyQt5 | 手把手教你YOLOv5添加PyQt页面

    演示视频:YOLOv5/v7添加 PyQT5 页面 我的毕业有救了 !哔哩哔哩

    2024年02月01日
    浏览(55)
  • PyQt5 | 手把手教你YOLOv7添加PyQt页面

    演示视频:YOLOv5/v7添加 PyQT5 页面 我的毕业有救了 !哔哩哔哩

    2023年04月24日
    浏览(58)
  • Pyqt5开发实战记录

    入职以来第一个开发项目: 1、如何给Qlabel加边框:右键label对象,选择“改变样式表”输入一下代码: 2、如何让垂直布局中button大小不发生变化:其实很简单,只需要设置button的最大值和最小值固定就可以了。 3、如何让图片自适应Qlabel的大小呢?有时候我们的图片太大了

    2024年02月11日
    浏览(38)
  • 从零开始使用YOLOv5+PyQt5+OpenCV+爬虫实现是否佩戴口罩检测

    全流程 教程,从数据采集到模型使用到最终展示。若有任何疑问和建议欢迎评论区讨论。 先放上最终实现效果 图片检测效果图 视频检测效果图 摄像头实时检测效果图 我已经处理了一份数据形成了对应的数据集。获取地址为百度网盘: 链接:https://pan.baidu.com/s/1SkraBsZXWCu1Y

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包