我有QWidget,其中包含QVBoxLayout和QLabel。确实,当我将Qlabel放入QVBoxLayout时,它会填充QVBoxLayout。如何使QLabel忽略QVBoxLayout。
如何仅在“文本标签”周围设置红色边框?
我尝试使用setStyleSheet,setGeometry,但是没有用。而且我认为使用maximizesize不是一个好的选择。
谢谢
答案 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_()
答案 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_())