pyqt - 如何在 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_())
解决方案
推荐阅读
- node.js - 在 Node 中为电子商务网站动态创建 Mongoose Schema
- python - 无法分配“'Single Bedded'”:“Patients.room_type”必须是“Accomodation”实例
- graph-theory - 我对树的最短路径长度有一些问题(具有 n 个顶点、n-1 个边的连接图)
- node.js - 无法发布 nodejs 和 mongodb
- c - 修补闭源网络应用程序以从文件中读取
- python - 在表中查找 NaN 行时 count() 和 sum() 之间的区别
- python - XGBoost 用于多分类和不平衡数据
- php - 如果客户在之前的 WooCommerce 订单中使用过相关优惠券,则限制使用优惠券
- java - 如何让正则表达式返回匹配的完整值而不仅仅是第一个字符
- java - 无法使用 Spring Security、Jpa 和 Hibernate 从多对多关联中的 Db 获取角色