PyQt5 - QLabel 填充无法按预期工作

Posted

技术标签:

【中文标题】PyQt5 - QLabel 填充无法按预期工作【英文标题】:PyQt5 - QLabel padding not work as expected 【发布时间】:2021-03-12 12:30:12 【问题描述】:

填充属性未按预期工作。

这是我的代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel

class Window(QWidget):
    def __init__(self):
        super().__init__()

        self.setFixedSize(450, 450)

        tracking_description = QLabel()
        tracking_description.setStyleSheet('''
                border: 2px solid;
                border-radius: 8px;
                padding-top: 0px;
                padding-bottom: 0px;
                padding-right: 10px;
                padding-left: 10px;
                ''')
        tracking_description.setText("Consente di scegliere una \
                delle camere installate sul territorio e impostarla \
                in <b>modalità tracciante</b>.<br />Durante questa fase \
                il sistema osserverà i veicoli che transitano nella scena \
                e <b>definirà in maniera automatica delle aree di \
                parcheggio</b>.<br />\Propedeuticamente, sarà possibile \
                definire le scene di osservazione che una specifica camerà \
                dovrà gestire.")
        tracking_description.setWordWrap(True)
        tracking_description.setFixedWidth(408)

        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addWidget(tracking_description)
        vbox.addStretch(1)

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addLayout(vbox)
        hbox.addStretch(1)

        self.setLayout(hbox)

if __name__ == "__main__":
    app = QApplication(["TODO"])
    win = Window()
    win.show()
    sys.exit(app.exec_())

如果我将 tracking_description QLabel 的 padding-rightpadding-left 保持为 10px,这就是输出(也有意外的顶部和底部填充):

如果我将padding-rightpadding-left 设置为30px,这就是输出(预期的顶部和底部填充为0px):

为什么会有这种行为?

【问题讨论】:

嗯,这似乎是一个复合问题,可能与字体度量固定宽度的要求有关。 QLabel 根据可用空间调整其大小,考虑多种因素,包括填充、间距、大小约束等,这通常是“概率猜测”,有时容易出现小错误。如果仔细观察,两个框的高度相同,计算为 10 行文本。我怀疑是否有直接的解决方案,唯一可能的答案是使用 QTextDocument ,然后根据填充和内容设置最大高度。 好的,我会尝试使用 QTextDocument!非常感谢。 我无法重现该行为。但可能有助于设置“qproperty-indent:0;”在样式表中。如果此属性为负数或未设置,Qt 会自动添加缩进。 天哪!!!! @bzs "qproperty-indent:0;"解决这个问题!!!!你真是个天才!谢谢 【参考方案1】:

如果您在 QLabel 上设置 marginpadding,则必须将 indent 设置为零。因为如果 indent 属性的值等于 -1 或未设置,Qt 会添加额外的空格(取决于对齐方式)。

QLabel 

    qproperty-indent:0; /* without px or whatever*/

【讨论】:

以上是关于PyQt5 - QLabel 填充无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

PYQT5 拖放行在 TableWidget 中未按预期工作

EditText 填充在 Android 中无法按预期工作

当我拖动自动填充手柄时,UDF 无法按预期工作

改变QLabel的大小时,PyQt5“定时器无法从另一个线程启动”错误

填充和注意掩码在 GPT 语言模型的批量输入中无法按预期工作

Primefaces Accordion + Datatable过滤器/多项选择无法按预期工作