如何使 Qlabel 不填充 BoxLayout

How to make Qlabel not filling BoxLayout

我有QWidget,其中包含QVBoxLayout 和QLabel。实际上,当我将 Qlabel 放入 QVBoxLayout 时,它会填充 QVBoxLayout。如何让 QLabel 忽略 QVBoxLayout。

如何让红色边框只在'Text Label'周围?

我尝试过使用 setStyleSheet、setGeometry,但没有用。而且我认为使用 maximumsize 不是一个好的选择。

谢谢

试一试:

import sys
from PyQt5.QtWidgets import *

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

        label  = QLabel("TextLabel") 
        layout = QGridLayout(self)
        layout.addWidget(label)

CSS = """
QLabel {
    font-family: Ubuntu-Regular;
    font-size: 12px;
    qproperty-alignment: AlignCenter; 
    color: blue;
    border: 3px solid red;
    border-radius: 4px;
    min-height: 40px;
    max-height: 40px;
    min-width: 48px;
    max-width: 100px;
    background: yellow;    
}
"""        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet(CSS)
    ex = Widget()
    ex.show()
    app.exec_()

一个简单的解决方案是使用 QSizePolicy,这样它不会扩展,而是收缩到最小值:

from PyQt5 import QtCore, QtWidgets

class Label(QtWidgets.QLabel):
    def __init__(self, *args, **kwargs):
        super(Label, self).__init__(*args, **kwargs)
        self.setAlignment(QtCore.Qt.AlignCenter)
        self.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        lbl = Label("TextLabel")
        lbl.setStyleSheet('''background: red;''')
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(lbl, alignment=QtCore.Qt.AlignCenter)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())