删除 Qlabel 中不必要的空白 space

remove unnecessary blank space in Qlabel

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

右边的标签尽量少取space。基本上删除文本周围的缩进。

类似下面的内容。

我有这个代码。

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_())

我好像搞不懂 works/what 是 margin, indent, padding, spacing, stretch 等等。请帮助我理解并解决这个问题。

它有 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()