面包屑图标 当前位置: 首页
AI资讯
热点详情

PyQT5常用布局管理方式与运行代码示例

AI热点日报
AI热点日报时间:2026-07-08
热点解读

之前聊过PyQT5的水平和垂直布局,这次来重点说说网格布局。它在日常开发中同样常见——支持固定尺寸的网格,也能自定义网格大小。填充顺序是从左到右、从上到下,逐个填满。 当然,你也可以选择性地留空某些网格,做出错位排列的效果。除此之外,QGridLayout还支持以下几种组件布局方式: QGridLa

之前聊过PyQT5的水平和垂直布局,这次来重点说说网格布局。它在日常开发中同样常见——支持固定尺寸的网格,也能自定义网格大小。填充顺序是从左到右、从上到下,逐个填满。

当然,你也可以选择性地留空某些网格,做出错位排列的效果。除此之外,QGridLayout还支持以下几种组件布局方式:

QGridLayout类与方法

往网格布局中添加QWidget对象的基本函数是:QtWidgets.QGridLayout.addWidget(widget, row, column)

默认情况下每个网格等大。如果想做出不同大小的网格,可以设置行或列的伸缩比率(stretch)。相关函数如下:

void setColumnStretch ( int column, int stretch )
void setRowStretch ( int row, int stretch )

上面这张图展示了每一列设置不同比率的效果,行也是同理,依此类推。

运行演示与代码

代码实现部分,通过一个自定义的GridLayout面板,结合多个QLabel组件,完成了一个多图像大图预览的布局排序。主要代码可以参考这里:PyQT5开发案例之简易图像浏览器。

运行结果演示:

GridLayout面板界面类代码如下:

import os
from PyQt5 import QtWidgets, QtCore, QtGui
import sys

class ImageBrowserPanel(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.image_files = []
        self.current_index = -1
        self.grid_labels = []

        # 文本标签
        self.pathLabel = QtWidgets.QLabel()
        self.pathLabel.setText("文件名称: test.png")
        self.pathLabel.setStyleSheet("background-color:deeppink; color: blue; border-radius:5px")
        self.pathLabel.setAlignment(QtCore.Qt.AlignCenter)

        # 图像总数
        self.numLabel = QtWidgets.QLabel()
        self.numLabel.setText("图像总数: 0")
        self.pathLabel.setStyleSheet("background-color:deeppink; color: blue; border-radius:5px")
        self.numLabel.setAlignment(QtCore.Qt.AlignCenter)

        fileBtn = QtWidgets.QPushButton("选择...")

        hbox_layout = QtWidgets.QHBoxLayout()
        hbox_layout.addWidget(self.pathLabel)
        hbox_layout.addWidget(self.numLabel)
        hbox_layout.addWidget(fileBtn)
        hbox_layout.addStretch(1)

        panel1 = QtWidgets.QGroupBox("图像信息")
        panel1.setLayout(hbox_layout)

        # 图像标签
        panel3 = QtWidgets.QWidget()
        grid_layout = QtWidgets.QGridLayout()
        for i in range(9):
            item_label = QtWidgets.QLabel()
            item_label.setStyleSheet("background-color:royalblue; border-radius:5px")
            pixmap = QtGui.QPixmap("test3.png")
            pix = pixmap.scaled(QtCore.QSize(210, 160), QtCore.Qt.KeepAspectRatio)
            item_label.setPixmap(pix)
            item_label.setAlignment(QtCore.Qt.AlignCenter)
            grid_layout.addWidget(item_label, int(i/3), int(i%3))
            self.grid_labels.append(item_label)

        panel3.setLayout(grid_layout)

        # 添加到布局管理器中
        vbox_layout = QtWidgets.QVBoxLayout()
        vbox_layout.addWidget(panel1)
        vbox_layout.addWidget(panel3)
        vbox_layout.addStretch(1)

        # 面板容器
        self.setLayout(vbox_layout)

        # setup listener
        fileBtn.clicked.connect(self.on_select_image_dir)

    def on_select_image_dir(self):
        img_dir = QtWidgets.QFileDialog.getExistingDirectory(self, "图像文件夹", ".")
        files = os.listdir(img_dir)
        self.image_files.clear()
        self.current_index = -1
        for f in files:
            if f.endswith(".png") or f.endswith(".jpg") or f.endswith(".bmp"):
                self.image_files.append(os.path.join(img_dir, f))
        if len(self.image_files) > 0:
            self.current_index = 0
            self.numLabel.setText("图像总数: " + str(len(self.image_files)))
            for im_file in self.image_files:
                pixmap = QtGui.QPixmap(im_file)
                pix = pixmap.scaled(QtCore.QSize(210, 160), QtCore.Qt.KeepAspectRatio)
                self.grid_labels[self.current_index % 9].setPixmap(pix)
                self.current_index = self.current_index + 1

选择一个文件夹之后,运行结果如下:

总结:本文展示了PyQT5网格布局的基本用法,并结合多个QLabel实现了图像的网格化显示预览功能。通过自定义面板和简单的文件选择逻辑,可以快速搭建一个多图预览工具。

热点追踪提示词
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:PyQT5常用布局管理方式与运行代码示例要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
来源:https://m.elecfans.com/article/2006166.html
代码 pyqt5

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关热点
AI热点2026-07-08 20:13
Craftman AI聊天机器人构建工具

最近留意到一款AI聊天机器人构建工具——Craftman,它的核心思路很有意思:让企业或个人能用自己已有的数据来训练ChatGPT,然后直接嵌入到网站上做智能客服或问答助手。简单来说,就是把通用大模型变成你的专属知识库响应系统。什么是Craftman?Craftman是一个AI聊天机器人构建平台,允

AI热点2026-07-08 20:13
Vidu长视频AI大模型一键生成16秒1080P高清视频

如果告诉你,现在借助AI技术就能一键生成时长16秒、分辨率达1080P的高清视频,并且画面流畅自然、物理规律真实可信,你是不是觉得有些不可思议?事实上,这就是Vidu——由中国生数科技与清华大学联合打造的全球首个长时长、高一致性、高动态性视频大模型。它采用独创的Diffusion与Transform

AI热点2026-07-08 20:13
Hansei通过AI聊天帮助用户高效便捷简化知识库访问流程

想象一下,你拥有一个庞大而复杂的知识库,里面堆满了各类文档、PDF文件以及YouTube视频教程。过去想要查找某份资料,往往需要翻遍目录、反复尝试关键词搜索,效率低下令人困扰。如今,借助Hansei这款知识库管理工具,一切变得轻松高效——你只需像与朋友聊天一样,用自然语言提出需求,AI助手就能从你的

AI热点2026-07-08 20:13
Blinkn ChatGPT智能购物助手

Blinkn是基于ChatGPT的智能电商购物助手,具备语义理解、精准产品推荐与比较、多语言支持等功能,可与主流平台无缝集成并个性化定制,提供7×24小时实时客服,高效解决购物疑问,显著减少决策摩擦,提升转化率与用户体验。

延伸阅读