首页 > 解决方案 > 如何在 PyQt5 固定大小的 QLabel 中放置文本?

问题描述

如何在 Qlabel 中修复特定大小的文本?想要根据父矩形增加或减少 utf8 字体大小并适合该矩形中的文本?在我的代码中,我的 lbl2 文本不适合该区域。我打算减小字体大小并使文本适合该特定区域。如何获得?

import sys

from PyQt5.QtWidgets import  QWidget,QApplication,QLabel,QVBoxLayout,QSizePolicy
from PyQt5.QtGui import QFont,QFontMetrics,QResizeEvent
from PyQt5.QtCore import Qt

class MyLabel1(QLabel):

    def __init__(self,mylabel_text,mylabel_fontname,mylabel_fontsize,mylabel_fontweight,mylable_letterspacing,
                 color_main,color_sub,mylabel_width,mylabel_height):
        super().__init__()

        font = QFont()
        self.mylabel_fontname = mylabel_fontname
        self.mylabel_fontsize = mylabel_fontsize
        self.mylabel_fontweight = mylabel_fontweight
        self.mylabel_text = mylabel_text
        self.mylable_letterspacing = mylable_letterspacing
        self.color_main = color_main
        self.color_sub = color_sub
        self.mylabel_width = mylabel_width
        self.mylabel_height = mylabel_height

        font.setFamily('"'+self.mylabel_fontname+'"')
        font.setPointSize(self.mylabel_fontsize)
        font.setWeight(self.mylabel_fontweight)
        font.setLetterSpacing(QFont.AbsoluteSpacing, self.mylable_letterspacing)

        self.setFont(font)
        self.setText(self.mylabel_text)
        self.setFixedSize(self.mylabel_width,self.mylabel_height)
        self.setStyleSheet(f"QLabel{{background-color: {self.color_main};border:{self.color_sub};border-radius:10px;}}")

    def resizeEvent(self, event: QResizeEvent):
        target_rect = self.contentsRect()
        max_width = self.width()
        max_height = self.height()
        print(target_rect)
        print(max_width,max_height)

        self.fontd = self.font()
        self.fontd.setPointSize(self.mylabel_fontsize)
        self.metrics = QFontMetrics(self.fontd)
        self.width = self.metrics.width(self.mylabel_text)
        self.height = self.metrics.height()
        print(self.width,self.height)

        if self.width > max_width:
            print("aaaaaa")


class example(QWidget):
    def __init__(self):
        super(). __init__()
        self.setWindowTitle("My Widget Example")

        self.lbl1 = MyLabel1(mylabel_text='<font color="red"><u>F</u></font><font color="black">ile</font>',
                             mylabel_fontname="Trebuchet MS",mylabel_fontsize=10,mylabel_fontweight=50,
                             mylable_letterspacing=1,color_main="lightgreen",color_sub="2px solid red",
                             mylabel_width=100,mylabel_height=70)

        self.lbl2 = MyLabel1(mylabel_text="Example",mylabel_fontname="Arial",mylabel_fontsize=20,
                             mylabel_fontweight=50,mylable_letterspacing=0,color_main = "skyblue",
                             color_sub="5px solid green",mylabel_width=100,mylabel_height=500)

        self.lbl3 = QLabel("python")

        self.lbl1.setMargin(5)
        self.lbl1.setAlignment(Qt.AlignCenter)

        self.lbl2.setMargin(15)
        self.lbl2.setAlignment(Qt.AlignCenter)

        self.lbl3.setMargin(5)
        self.lbl3.setAlignment(Qt.AlignCenter)


        self.vbox = QVBoxLayout()
        self.vbox.addWidget(self.lbl1)
        self.vbox.addWidget(self.lbl2)
        self.vbox.addWidget(self.lbl3)
        self.setLayout(self.vbox)


if __name__ =="__main__":
    app = QApplication(sys.argv)
    mainwindow = example()
    mainwindow.show()
    sys.exit(app.exec_())

标签: pyqtpyqt5

解决方案


推荐阅读