Простое решение состоит в том, чтобы использовать 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_())