QLabel设置多行文字显示不同样式

记得才学Qt的时候做了一个键盘,当时对Qt的样式还是不太熟悉,为了实现上面符号+下面数字的键盘效果,用PS做了一套图……下图蓝框中的几个QPushButton实质上都是贴图。

当时原本是准备用QPushButton设置两行Text,并显示不同样式,然后没做到,只能实现换行但改不了文字样式,后来就只能贴图了,文字换行的代码是这样的:

btn->setText("Test1\r\nTest2"); 

 

今天做上面图标+下面文字的QPushButton时,突然想到了以前没填完的这个坑,特地翻出这个键盘程序,缅怀一下在EFORT实习的这段经历,以及填完坑。

方法其实很简单,引入HTML的语法,既然Qt中可以用qss,那当然也可以用HTML。下面的代码创建了一个QLabel,用HTML设置了其中的文字,实现了多行文字显示不同样式的功能。嫌弃文字不居中的也可以加个HTML上的<center>。这里选择用QLabel而不用QPushButton是因为QPushButton对HTML样式无效,勉强用QLabel代替一下。

QLabel *label = new QLabel(this);
label->setText("<font style = 'font-size:15px; color:#FF0000;'> Test </font>"
               "<br/>"
               "<font style = 'font-size:20px; color:#00FF00; font-weight:bold'> Text </font>");
label->setStyleSheet("border:2px solid blue; border-radius:10px");

 效果如下:

 

这里有个弊端,就是QLabel并不像QPushButton一样自带点击事件 ,所以要手动添加点击事件,有下面两种方法:

  1. 使用eventFilter事件过滤器;
  2. 提升控件,继承QLabel,重写mousePressEvent()函数。
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 可以使用QLabel的setWordWrap属性来显示文本。将其设置为True,然后使用setText方法设置文本内容即可。 示例代码: ``` from PyQt5.QtWidgets import QApplication, QWidget, QLabel class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): label = QLabel(self) label.setWordWrap(True) label.setText("这是第一文本\n这是第二文本\n这是第三文本") self.setGeometry(300, 300, 250, 150) self.setWindowTitle('多文本') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 运后,会显示文本。 ### 回答2: PyQt5是一个强大的Python GUI开发工具包,它提供了一个QLabel小部件,用户可以将其用于显示或多文本。在PyQt5中,我们可以通过以下步骤来实现QLabel显示文本: 1. 将多文本字符串分割成一系列单独的文本。 2. 创建一个包含这些文本的Python列表。 3. 将Python列表中的文本连接成一个单独的多文本字符串。 4. 将多文本字符串设置QLabel部件的文本内容。 下面是一个示例代码,展示了如何使用PyQt5将多文本显示QLabel控件中: ``` import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel from PyQt5.QtGui import QPainter, QTextFormat, QFontMetrics class MyLabel(QLabel): def __init__(self, text): super().__init__() self.setText(text) self.setWordWrap(True) self.setAlignment(Qt.AlignTop) self.textFormat = QTextFormat() self.textFormat.setFont(self.font()) self.updateGeometry() def setText(self, text): self.text = text lines = text.split("\n") self.textLines = [] self.textWidth = 0 fontMetrics = QFontMetrics(self.font()) for line in lines: lineWidth = fontMetrics.width(line) self.textWidth = max(self.textWidth, lineWidth) self.textLines.append(line) self.textHeight = fontMetrics.height() * len(self.textLines) super().setText(text) def paintEvent(self, event): painter = QPainter(self) for i, line in enumerate(self.textLines): yPos = (i + 1) * self.textFormat.height() painter.drawText(0, yPos, line) def minimumSizeHint(self): return QSize(self.textWidth, self.textHeight) def sizeHint(self): return QSize(self.textWidth, self.textHeight) if __name__ == '__main__': app = QApplication(sys.argv) w = QWidget() text = "第一文本\n第二文本\n第三文本" label = MyLabel(text) label.move(20, 20) w.setGeometry(100, 100, 250, 150) w.setWindowTitle('PyQt5 Label 多文本') w.show() sys.exit(app.exec()) ``` 在上面的代码中,我们创建了一个名为MyLabel的自定义QLabel部件,然后重写了setText()、paintEvent()、minimumSizeHint()和sizeHint()方法。setText()方法用于将多文本字符串拆分成一系列单独的文本,并计算整个文本的宽度和高度。paintEvent()方法使用QPainter绘制每个文本。minimumSizeHint()和sizeHint()方法分别返回部件最小和理想的大小。 通过使用自定义的MyLabel控件,我们可以轻松地将多文本显示在PyQt5应用程序中。 ### 回答3: 在使用pyqt5中,如果需要在qlabel显示文本,可以通过设置qlabel控件的'wordWrap'属性以及使用HTML标记来实现。 首先,在pyqt5中,我们可以使用setWordWrap()方法来设置qlabel控件的'wordWrap'属性,代码如下: ```python label = QLabel() label.setWordWrap(True) ``` 接下来,我们需要通过HTML标记来控制qlabel中文本的格式。具体来说,我们可以使用'<br>'标记来控制文本的换;使用'<p>'标记来分段显示文本。 例如,下面的代码演示了如何使用HTML标记以及setWordWrap()方法来显示文本: ```python label = QLabel() label.setText("<html><body>" "<p>This is the first line.</p>" "<p>This is the second line.</p>" "<p>This is the third line.</p>" "</body></html>") label.setWordWrap(True) ``` 在上面的代码中,我们先使用HTML标记来控制qlabel控件中文本的格式。然后,通过setText()方法来将HTML代码赋给qlabel的文本。最后,使用setWordWrap()方法来启用单词换。 通过以上方法,我们可以非常方便地在pyqt5中实现qlabel控件的多文本显示

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值