QLabel支持文本或图片显示,是任何GUI设计中最常用的控件之一。
一、QLabel基本概述
QLabel标签用于显示,可以以多种方式进行外观配置,没有提供用户交互功能,但是可以用于为另一个小部件指定焦点助记符或快捷键。
显示内容类型
类型 | 说明 |
纯文本 | 使用setText()方法设置纯文本信息进行显示 |
富文本 | 使用setText()方法设置一个富文本信息,亦是一个HTML格式的标签文本信息。 |
图片 | 使用setPixmap()方法将QPixmap对象设置导标签中。 |
视频 | 使用setMovie()方法将QMovie对下个设置导标签中进行显示。 |
数字 | 使用setNum()方法将数值(int或者double类型)转换成纯文本显示到标签中。 |
空数据 | 类似于空文本,可使用clear()方法来清空数据。 |
注:
要显示类似网页获取的富文本格式的内容时可使用setTextFormat()方法进行显示,避免标签将文本识别成富文本进行显示。
二、QLabel常用方法
1.设置对齐方式setAlignment(AlignmentFlag)
self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)
对齐方式AlignmentFlag列表:
AlignLeft
AlignLeading
AlignRight
AlignTrailing
AlignHCenter
AlignJustify
AlignAbsolute
AlignHorizontal_Mask
AlignTop
AlignBottom
AlignVCenter
AlignVertical_Mask
AlignCenter
AlignBaseline
2.设置文本缩进setIndent(int)
self.label_plaintext.setIndent(4) #设置缩进量为4个像素点
3.设置和获取显示内容
# 通过以下方法设置文本显示内容
self.label_plaintext.setText("这是一个纯文本")
self.label_richtext.setText("<font color = blue>这是一个富文本文本</font>")
self.label_int.setNum(1314)
self.label_double.setNum(123.456)
self.label_image.setPixmap(QPixmap(r"./res/百度一下.png"))
self.label_link.setText("<a href='https://www.baidu.com'>百度一下</a>") # 超链接标签
# 通过以下方法获取显示内容
self.label.text()
self.label.pixmap()
self.label.movie()
4.设置换行setWordWrap(bool)
self.label_plaintext.setWordWrap(True)
5.设置标签内容交互标识setTextInteractionFlags(TextInteractionFlag)
self.label_plaintext.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) # 使能文本可选
标志如下:
LinksAccessibleByKeyboard:链接用tab键聚焦,enter激活
LinksAccessibleByMouse:链接可用鼠标突出显示和激活
NoTextInteraction:不可与文本交互
TextBrowserInteraction:文本浏览方式默认值
TextEditable:可编辑
TextEditorInteraction:文本编辑器默认值
TextSelectableByKeyboard:文本可用键盘选择,显示一个光标
TextSelectableByMouse:文本可用鼠标选择,支持复制到剪切板
6.返回所选文本
label.selectedText()
7.设置伙伴关系setBuddy(QWidget)
label.setBuddy(QWidget)
8.允许打开超链接
self.label_link.setOpenExternalLinks(True)
三、QLabel常用信号(事件)
- 鼠标滑过事件linkHovered(str)
当用户将鼠标悬停在链接上时发出此信号。由锚点引用的URL在链接中传递。
- 鼠标点击事件linkActivated(str)
该信号在用户单击链接时发出。由锚点引用的URL在链接中传递。
注意:
该信号需要标签设置了超链接,使用html的a标签,设置了herf属性,如“<a herf="***"></a>”才能正常触发信号,否则无法触发触发信号。
若设置了允许打开超链接,则无法触发linkActivated信号,若需要保留超链接和触发信号,可以使用在信号槽中设置允许打开超链接,然后再在其他槽函数中重新关闭打开超链接。
示例1,QLabel的基本操作:
# _*_ coding:utf-8 _*_
import sys
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QVBoxLayout
from PyQt6.QtWidgets import QLabel
from PyQt6.QtWidgets import QLineEdit
from PyQt6.QtWidgets import QPushButton
from PyQt6.QtGui import QPixmap
from PyQt6.QtGui import QColor
from PyQt6.QtGui import QFont
from PyQt6.QtCore import Qt
class QLabelDemo(QMainWindow):
"""标签示例"""
def __init__(self) -> None:
"""构造函数"""
super().__init__() # 调用父类初始化函数-
self.init_ui() # 初始化界面
def init_ui(self):
"""初始化UI界面"""
self.setWindowTitle("QLabelDemo") # 设置标题
self.resize(600,400) #设置窗体尺寸
self.mainwidget = QWidget() #主控件
self.vblayout_main = QVBoxLayout() # 中央控件布局
self.vblayout_main.setAlignment(Qt.AlignmentFlag.AlignCenter) # 设置居中对齐
self.mainwidget.setLayout(self.vblayout_main) # 设置布局
self.setCentralWidget(self.mainwidget) # 设置中心控件
self.label_plaintext = QLabel(self) # 纯文本标签
self.label_plaintext.setText("这是一个纯文本,用来进行基本测试,同时可以用来看是否支持换行,哈哈哈哈哈")
self.label_plaintext.setIndent(10) # 设置缩进量为10个像素点
self.label_plaintext.setAlignment(Qt.AlignmentFlag.AlignLeft)
self.label_plaintext.setWordWrap(True) # 允许换行
self.label_plaintext.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) # 使能文本可选
self.label_plaintext.setSelection(0,3) # 选中文本
self.label_plaintext.linkHovered.connect(self.link_hovered) # 关联鼠标滑过事件
self.label_plaintext.linkActivated.connect(self.link_action) # 关联鼠标点击事件
self.vblayout_main.addWidget(self.label_plaintext)
self.label_richtext = QLabel(self) # 富文本标签
self.label_richtext.setText("<font color = blue>这是一个富文本文本</font>")
self.label_richtext.setAlignment(Qt.AlignmentFlag.AlignLeft)
self.vblayout_main.addWidget(self.label_richtext)
self.label_int = QLabel(self) # 整型标签
self.label_int.setNum(1314)
self.label_int.setAlignment(Qt.AlignmentFlag.AlignLeft)
self.vblayout_main.addWidget(self.label_int)
self.label_double = QLabel(self) # 双精度数字标签
self.label_double.setNum(123.456)
self.label_double.setAlignment(Qt.AlignmentFlag.AlignLeft)
self.label_double.linkHovered.connect(self.link_hovered) # 关联鼠标滑过事件
self.label_double.linkActivated.connect(self.link_action) # 关联鼠标点击事件
self.vblayout_main.addWidget(self.label_double)
self.label_image = QLabel(self) # 图片标签
self.label_image.setPixmap(QPixmap(r"./res/百度一下.png"))
self.label_image.setAlignment(Qt.AlignmentFlag.AlignLeft)
self.label_image.setToolTip("这是一个图片标签")
self.label_image.linkHovered.connect(self.link_hovered) # 关联鼠标滑过事件
self.label_image.linkActivated.connect(self.link_action) # 关联鼠标点击事件
self.vblayout_main.addWidget(self.label_image)
self.label_link = QLabel(self) # 链接标签
self.label_link.setText("<a href='https://www.baidu.com'>百度一下</a>") # 超链接标签
self.label_link.linkHovered.connect(self.link_hovered) # 关联鼠标滑过事件
self.label_link.linkActivated.connect(self.link_action) # 关联鼠标点击事件
self.label_link.setAlignment(Qt.AlignmentFlag.AlignLeft)
self.vblayout_main.addWidget(self.label_link)
self.setWindowCenter() # 窗体居中
def setWindowCenter(self):
"""窗口居中"""
win_rect = self.frameGeometry() # 获取窗体矩形
green_center = self.screen().availableGeometry().center() # 获取屏幕矩形中心
win_rect.moveCenter(green_center) # 窗体矩形移动居中
self.move(win_rect.topLeft()) # 窗体移动居中,坐标点时窗体矩形左上角
def link_hovered(self, link) -> None:
print(self.sender().text() + ":鼠标划入标签! 当前链接:" + link)
self.label_link.setOpenExternalLinks(False)
def link_action(self, link) -> None:
print(self.sender().text() + ":鼠标点击! 当前链接: " + link)
if self.sender() == self.label_link:
self.label_link.setOpenExternalLinks(True) # 需要使能打开外部链接开关才能正常打开超链接
if __name__ == "__main__":
"""以主程序运行"""
app = QApplication(sys.argv)
window = QLabelDemo()
window.show()
sys.exit(app.exec())
结果:
界面:
选中文本:
触发信号,双击可打开超链接: