You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5复刻无结果界面:如何消除标题与副标题的间距?

问题描述

想要用PyQt5复刻无结果提示界面,目前遇到的问题是标题“No results found”与副标题“Try different keywords or remove search filters”之间存在多余间距。当前实现代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt5.QtCore import Qt


class NoResultsWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # "No results found" -> heading
        self.noResultsLabel = QLabel("No results found", self)
        self.noResultsLabel.setAlignment(Qt.AlignCenter)
        self.noResultsLabel.setStyleSheet("font-size: 24px;")

        # "Try different keywords or remove search filters" -> subheading
        self.instructionLabel = QLabel(
            "Try different keywords or remove search filters", self
        )
        self.instructionLabel.setAlignment(Qt.AlignCenter)
        self.instructionLabel.setStyleSheet("font-size: 14px; color: gray;")

        layout = QVBoxLayout()
        layout.addWidget(self.noResultsLabel)
        layout.addWidget(self.instructionLabel)
        layout.setSpacing(10)

        self.setLayout(layout)

        self.setWindowTitle("No Results")
        self.setGeometry(300, 300, 350, 200)
        self.show()


def main():
    app = QApplication(sys.argv)
    ex = NoResultsWidget()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
解决方案

以下几种方法可以消除两个标签间的多余间距,按需选择即可:

方法1:调整布局间距与控件边距

QLabel默认自带上下边距,加上布局的spacing会放大间距。可以通过设置布局spacing为0,并移除标签的默认边距来解决:

def initUI(self):
    # "No results found" -> heading
    self.noResultsLabel = QLabel("No results found", self)
    self.noResultsLabel.setAlignment(Qt.AlignCenter)
    # 移除标签边距并设置字体
    self.noResultsLabel.setStyleSheet("font-size: 24px; margin: 0;")

    # "Try different keywords or remove search filters" -> subheading
    self.instructionLabel = QLabel(
        "Try different keywords or remove search filters", self
    )
    self.instructionLabel.setAlignment(Qt.AlignCenter)
    self.instructionLabel.setStyleSheet("font-size: 14px; color: gray; margin: 0;")

    layout = QVBoxLayout()
    layout.addWidget(self.noResultsLabel)
    layout.addWidget(self.instructionLabel)
    # 将布局间距设为0(或根据需求调整为更小数值)
    layout.setSpacing(0)
    # 可选:移除布局的整体内容边距,避免界面上下留白
    layout.setContentsMargins(0, 0, 0, 0)

    self.setLayout(layout)

    self.setWindowTitle("No Results")
    self.setGeometry(300, 300, 350, 200)
    self.show()

方法2:使用QFormLayout实现紧凑布局

QFormLayout天生适合管理标题+描述的组合结构,能自动实现紧凑排列:

def initUI(self):
    # 标签初始化代码不变
    self.noResultsLabel = QLabel("No results found", self)
    self.noResultsLabel.setAlignment(Qt.AlignCenter)
    self.noResultsLabel.setStyleSheet("font-size: 24px;")

    self.instructionLabel = QLabel(
        "Try different keywords or remove search filters", self
    )
    self.instructionLabel.setAlignment(Qt.AlignCenter)
    self.instructionLabel.setStyleSheet("font-size: 14px; color: gray;")

    # 替换为QFormLayout
    layout = QFormLayout()
    layout.setFormAlignment(Qt.AlignCenter)
    layout.setLabelAlignment(Qt.AlignCenter)
    layout.setSpacing(0)
    layout.setContentsMargins(0, 0, 0, 0)
    layout.addRow(self.noResultsLabel, self.instructionLabel)

    self.setLayout(layout)

    self.setWindowTitle("No Results")
    self.setGeometry(300, 300, 350, 200)
    self.show()

方法3:单个QLabel+富文本(最灵活)

直接用HTML富文本将标题和副标题整合到一个QLabel中,可精确控制样式和间距:

def initUI(self):
    # 用HTML组合标题与副标题,自定义间距和样式
    content = """
    <p style="font-size:24px; margin:0; text-align:center;">No results found</p>
    <p style="font-size:14px; margin:5px 0; text-align:center; color:gray;">Try different keywords or remove search filters</p>
    """
    self.resultLabel = QLabel(content, self)
    
    layout = QVBoxLayout()
    layout.addWidget(self.resultLabel)
    layout.setContentsMargins(0, 0, 0, 0)
    
    self.setLayout(layout)

    self.setWindowTitle("No Results")
    self.setGeometry(300, 300, 350, 200)
    self.show()

内容的提问来源于stack exchange,提问作者Edoardo Balducci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:08:31