如何使Qlabel不填充BoxLayout

时间:2019-02-13 15:42:17

标签: python pyqt qlabel

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

enter image description here

如何仅在“文本标签”周围设置红色边框?

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

谢谢

2 个答案:

答案 0 :(得分:1)

尝试一下:

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

enter image description here

答案 1 :(得分:0)

一个简单的解决方案是使用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_())

enter image description here