如何使 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_())
我有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_())