07. 标签控件

一、标签控件

  QLabel 控件,又称为 标签控件,它主要用于显示用户不能编辑的文本,标识窗体上的对象(例如,给文本框、列表框添加描述信息等)。

  我们可以在终端中使用 pip 安装 PySide6 模块。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip 指令后通过 -i 指定国内镜像源下载

pip install pyside6 -i https://mirrors.aliyun.com/pypi/simple

  国内常用的 pip 下载源列表:

  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 类的常用信号有两个:linkActivatedlinkHovered

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 属性,可以看到有两个值,分别为:HorizontalVertical

  其中,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                                                    # 底部对齐
posted @ 2024-12-19 23:28  星光映梦  阅读(296)  评论(0)    收藏  举报