07. 标签控件
一、标签控件
QLabel 控件,又称为 标签控件,它主要用于显示用户不能编辑的文本,标识窗体上的对象(例如,给文本框、列表框添加描述信息等)。
我们可以在终端中使用 pip 安装 PySide6 模块。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip 指令后通过 -i 指定国内镜像源下载。
pip install pyside6 -i https://mirrors.aliyun.com/pypi/simple
国内常用的 pip 下载源列表:
- 阿里云 https://mirrors.aliyun.com/pypi/simple
- 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple
- 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple
QLable 类的常用方法如下:
# 实例方法
text() -> str # 获取QLabel的文字
setTextFormat(format:Qt.TextFormat) -> None # 设置QLabel的文字格式
setParent(parent:QWidget) -> None # 设置标签控件所在的父容器
setSelection(start:int, length:int) -> None # 设置选中文字的范围
selectedText() -> str # 获取选中的文字
hasSelectedText() -> bool # 判断是否选中文字
setIndent(indent) -> None # 设置缩进
indent() -> int # 获取缩进
pixmap() -> QPixmap # 获取QLabel的图片
setToolTip(text:str) -> None # 设置标签的提示文字
setWordWrap(on:bool) -> None # 设置是否自动换行
setAlignment(aligement:Qt.Alignment) -> None # 设置标签文字的对齐方式
setOpenExternalLinks(open:bool) -> None # 设置是否打开外部链接
setFont(font:QFont) -> None # 设置标签文字的字体
font() -> QFont # 获取标签文字的字体
setPalette(palette:QPalette) -> None # 设置调色板
palette() -> QPalette # 获取调色板
setGeometry(rect:QRect) -> None # 设置标签的大小和位置
geometry() -> QRect # 获取标签的大小和位置
minimumSizeHint() -> QSize # 获取标签的最小尺寸
setScaledContents(enable:bool) -> None # 设置显示的图片是否充满整个标签控件
setMargin(margin:int) -> None # 设置标签的边距
setBuddy(widget:QWidget) -> None # 设置标签的伴随控件
buddy() -> QWidget # 获取标签的伴随控件
# 槽方法
setText(text:str) -> None # 设置显示的文字
setNum(num:Union[int,float]) -> None # 设置显示的数字
clear() -> None # 清空显示的内容
setPixmap(pixmap:QPixmap) -> None # 设置显示的图片
setPicture(picture:QPicture) -> None # 设置显示的图片
setMovie(movie:QMovie) -> None # 设置显示的动画
QLable 类的常用信号有两个:linkActivated 和 linkHovered。
linkActivated(link) # 单击标签中嵌入的超链接时发送信号
linkHovered(link) # 鼠标指针滑过标签中嵌入的超链接时发射信号
我们新建一个 ui.py 文件,用来存放 UI 相关的代码。
from PySide6.QtWidgets import QWidget
from PySide6.QtWidgets import QLabel
from PySide6.QtGui import QPixmap, QFont
from PySide6.QtCore import QRect, Qt
class MyUi:
def setupUi(self, window:QWidget):
window.resize(800, 600) # 1.设置窗口对象大小
width = window.width()
height = window.height()
print(f"width: {width}, height: {height}")
self.label1 = QLabel(window) # 2.创建标签控件
self.label2 = QLabel(window)
self.label2.setGeometry(QRect(width//2-150, 150, 300, 30)) # 3.设置标签控件的位置和尺寸
self.label1.setPixmap(QPixmap("assets/images/1.jpg")) # 4.设置标签控件的图片
self.label1.setScaledContents(True) # 5.设置标签控件的图片是否填充满标签控件
font = QFont("黑体", pointSize=20) # 6.创建字体对象
self.label2.setFont(font) # 7.设置标签控件的字体
self.label2.setText("<a href='https://www.baidu.com'>百度</a>") # 8.设置标签控件的文字
self.label2.setToolTip("百度") # 9.设置鼠标悬停时的提示信息
self.label2.setAlignment(Qt.AlignmentFlag.AlignCenter) # 10.设置标签控件的对齐方式
self.label2.setOpenExternalLinks(True) # 11.允许跳转外部网站,此时linkActivated信号无效
我们新建一个 widget.py 文件,用来存放业务逻辑相关的代码。
import sys
from PySide6.QtWidgets import QApplication, QWidget
from ui import MyUi
class MyWidget(QWidget):
def __init__(self):
super().__init__() # 1.调用父类Qwidget类的__init__()方法
self.__ui = MyUi()
self.__ui.setupUi(self) # 2.初始化页面
self.__ui.label2.linkHovered.connect(self.horver) # 3.关联鼠标悬停时触发信号
self.__ui.label2.linkActivated.connect(self.activated) # 4.关联鼠标点击时触发信号
def horver(self, link):
print(f"欢迎查看【{link}】链接")
def activated(self, link):
print(f"你点击了【{link}】链接")
if __name__ == "__main__":
app = QApplication(sys.argv) # 1.创建一个QApplication类的实例
window = MyWidget() # 2.创建一个窗口
window.show() # 3.显示窗口
sys.exit(app.exec()) # 4.进入程序的主循环,并通过exit函数确保主循环安全结束
self.label = QLabel() # 创建标签控件
首先我们使用 QLabel 创建一个标签对象。创建好的标签控件,我们可以调用 show() 方法 显示出来,但这样的话,标签控件会独立显示。如果,我们想标签控件显示在指定的窗口中,我们可以为标签控件调用 setParent(parent:QWidget) 方法 指定一个父窗口。如果父窗口显示的话,那么该标签控件也会显示出来。
self.label.setParent(window) # 显示标签控件的父控件
我们可以在 Qt Designer 中设计器的属性编辑器中的 text 属性来设置标签控件的显示文本,也可以直接通过 Python 代码调用 QLabel 类的 setText(text) 方法来 设置属性文本。
self.label.setText("我是一个标签") # 设置标签的文本
以上的步骤,我们可以简化为一个步骤,即 在创建标签控件的同时,指定它的显示文本和父窗口。
self.label = QLabel("我是一个标签", window) # 创建标签控件,并设置它的文本和父控件
我们还可以为标签 设置显示图片,需要使用 QLable 类的 setPixmap(pixmap:QPixmap)方法。该方法需要有一个 QPixmap 对象,表示图标对象。
from PySide6.QtGui import QPixmap
self.label.setPixmap(QPixmap("assets/images/1.jpg")) # 设置标签控件的图片
如果我们把一个非常大(大于窗口的宽高)的图片设置成标签的显示图片,在运行程序后,我们发现标签的图片只显示一部分。此时,我们对窗口进行拉伸,会发现图片大小并不会随着窗口大小的改变而改变,也就是没有做到自适应。我们可以使用 QLabel 控件的 setScaledContents(enable:bool) 方法设置为 True 来 实现图片自适应。
self.label.setScaledContents(True) # 设置标签控件的图片是否填充满标签控件
我们还可以为标签 设置超链接,在使用 QLable 类中的 setText(text:str)方法时,使用 HTML 的 <a> 标签设置超链接文本,然后将 Label 标签中的 setOpenExternalLinks(open:bool) 方法设置为 True,以便 允许访问超链接。
self.label.setText("<a href='https://www.baidu.com'>百度</a>") # 设置标签控件的超链接文字
self.label.setToolTip("百度") # 设置鼠标悬停时的提示信息
self.label.setOpenExternalLinks(True) # 允许跳转外部网站
PySide6 中还支持 设置标签中文本的对齐方式,主要用到 alignment 属性。在 Qt Designer 设计器的属性编辑器中展开 alignment 属性,可以看到有两个值,分别为:Horizontal 和 Vertical。
其中,Horizontal 是 用来设置标签文本的水平对齐方式,取值 4 个:
Qt.AlignmentFlag.AlignLeft # 左对齐
Qt.AlignmentFlag.AlignCenter # 水平居中对齐
Qt.AlignmentFlag.AlignRight # 右对齐
Qt.AlignmentFlag.AlignJustify # 两端对齐
Vertical 用来 设置标签文本的垂直对齐方式,取值有 3 个:
Qt.AlignmentFlag.AlignTop # 顶部对齐
Qt.AlignmentFlag.AlignVCenter # 垂直居中对齐
Qt.AlignmentFlag.AlignBottom # 底部对齐

浙公网安备 33010602011771号