首页 > 解决方案 > 删除 Qlabel 中不必要的空格

问题描述

在此处输入图像描述

我希望左侧的标签都具有相同的水平长度,而文本与左侧对齐。它们的垂直尺寸等于相应右侧小部件的垂直尺寸。

右侧的标签尽可能少地占用空间。基本上删除文本周围的缩进。

像下面的东西。

在此处输入图像描述

我有这个代码。

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


class Window2(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("About")

        vbox = QVBoxLayout()

        hboxes = list()
        disclaimer = {
            'Text': """
                some text
            """,
            'Longer text': """
                longer text longer text text longer text longer    
            """
        }

        for label, text in disclaimer.items():
            hbox = QHBoxLayout()

            for t in (label, text):
                l = QLabel(t)
                l.setAlignment(Qt.AlignLeft)
                l.setStyleSheet('border-style: solid; border-width: 1px; border-color: black;')
                hbox.addWidget(l)

            vbox.addLayout(hbox)

        self.setLayout(vbox)
        self.show()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    main_window = Window2()
    sys.exit(app.exec_())

我似乎无法弄清楚它是如何工作的/什么是边距、缩进、填充、间距、拉伸等。请帮助我理解并解决这个问题。

标签: pythonpyqt5qlabel

解决方案


它有2个错误:

  • 多行字符串添加了空格,因此您有两个选项:使用 strip() 删除它们或手动删除它们,在这种情况下,我将使用第二个选项。
  • 不要在 QVBoxLayout 中使用嵌套的 QHBoxLayout,因为它们不会保持对齐,而是使用 QGridLayout。
class Window2(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("About")

        disclaimer = {
            "Text": """some text""",
            "Longer text": """longer text longer text text longer text longer""",
        }

        gridlay = QGridLayout(self)

        for i, (label, text) in enumerate(disclaimer.items()):

            for j, t in enumerate((label, text)):
                l = QLabel(t.strip())
                l.setAlignment(Qt.AlignLeft)
                l.setStyleSheet(
                    "border-style: solid; border-width: 1px; border-color: black;"
                )
                gridlay.addWidget(l, i, j)

        self.show()

在此处输入图像描述


推荐阅读