Как подогнать размер рамки под QLabel

Пытался сделать рамку для QLabel таким способом:

import sys
from PyQt5 import QtWidgets, QtCore

application = QtWidgets.QApplication(sys.argv)

window = QtWidgets.QWidget()

label = QtWidgets.QLabel("Test")
label.setFrameStyle(QtWidgets.QFrame.Box | QtWidgets.QFrame.Plain)
label.setAlignment(QtCore.Qt.AlignCenter)

layout = QtWidgets.QVBoxLayout()
layout.addWidget(label)

window.setLayout(layout)
window.resize(300, 300)
window.show()

sys.exit(application.exec_())

как сделать так, что бы была такая рамка:

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

А не такая:

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

то есть, что бы рамка была не растянута под окно, а подогнана под QLabel


Ответы (1 шт):

Автор решения: S. Nick

Вариант номер два:

import sys
from PyQt5 import QtWidgets, QtCore

class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        label = QtWidgets.QLabel("Test", alignment = QtCore.Qt.AlignCenter)
        label.setFrameStyle(QtWidgets.QFrame.Box | QtWidgets.QFrame.Plain)

        layout = QtWidgets.QVBoxLayout()
        layout.addStretch(1)                                                 # !!!
        layout.addWidget(label)
        layout.addStretch(1)                                                 # !!!

        mainlayout = QtWidgets.QHBoxLayout(self)                             # +++
        mainlayout.addStretch(1)                                             # !!!
        mainlayout.addLayout(layout)
        mainlayout.addStretch(1)                                             # !!!   

if __name__ == '__main__':
    application = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.resize(300, 300)
    window.show()
    sys.exit(application.exec_())

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


Update

первый текст вывело в рамке на пол окна, второй текст вывело вообще без рамки

Вариант номер три:

import sys
from PyQt5 import QtWidgets, QtCore

class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        label = QtWidgets.QLabel("first", alignment = QtCore.Qt.AlignCenter)
        label.setFrameStyle(QtWidgets.QFrame.Box | QtWidgets.QFrame.Plain)
        label1 = QtWidgets.QLabel("second", alignment = QtCore.Qt.AlignCenter)
        label1.setFrameStyle(QtWidgets.QFrame.Box | QtWidgets.QFrame.Plain)        # + label1, - label

        layout = QtWidgets.QGridLayout()
        # layout.addWidget(<object>, <row>, <column>)

        layout.setRowStretch(0, 1)

        layout.addWidget(label, 2, 1)
        layout.addWidget(label1, 2, 2)

        layout.setRowStretch(0, 1)                     # +
        layout.setRowStretch(3, 1)                     # +

        layout.setColumnStretch(0, 2)                  # +
        layout.setColumnStretch(1, 1)                  # +
        layout.setColumnStretch(2, 1)                  # +
        layout.setColumnStretch(3, 2)                  # +

        self.setLayout(layout)


if __name__ == '__main__':
    application = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.resize(300, 300)
    window.show()
    sys.exit(application.exec_())

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

→ Ссылка