PyQt5 удаляет ненужное пустое пространство в 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_())

Кажется, я не могу понять, как это работает / что такое поля, отступ, отступы, интервалы, растяжение и т. Д. Пожалуйста, помогите мне понять и решить эту проблему.


person Vitamin C    schedule 03.01.2020    source источник


Ответы (1)


Имеет 2 ошибки:

  • Многострочная строка добавляет пробелы, поэтому у вас есть 2 варианта: используйте strip (), чтобы удалить их, или удалите их вручную, в этом случае я буду использовать второй вариант.
  • Не используйте вложенный QHBoxLayout внутри QVBoxLayout, поскольку они не будут поддерживать выравнивание, вместо этого используйте 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()

введите описание изображения здесь

person eyllanesc    schedule 03.01.2020