【Hello,PyQt】pyqt5中的QLabel控件

PyQt5 是一个强大的Python库,用于创建图形用户界面(GUI)。其中,QLabel 控件作为一个简单而实用的组件,经常用于显示文本、图像,甚至可以创建带有超链接的标签。这篇博客中将介绍 QLabel 控件的各种功能和用法,帮助您更好地利用这个神奇的控件。

什么是QLabel?

QLabel 是 PyQt5 中的一个基本控件,主要用于在用户界面中显示静态文本或图像。它不仅可以用于简单的文本显示,还支持富文本、图像展示、超链接等功能

创建第一个QLabel

让我们从一个简单的例子开始,创建一个基本的 QLabel 控件:

import sys
from PyQt5.QtWidgets import QLabel, QWidget,QApplication

app = QApplication(sys.argv)
w=QWidget()
w.setGeometry(300,300,300,300)
label = QLabel('Hello, QLabel!',w)
w.show()
sys.exit(app.exec_())

在窗口中创建QLabel控件的方式主要有两种,第一种是***直接将QLabel作为窗口的子部件***label = QLabel('Hello, QLabel!',w);第二种是***使用布局管理器***,先将QLabel控件添加到布局中,然后将布局添加给窗口。

#创建窗口
window = QWidget()
# 创建QLabel
label = QLabel('Hello, QLabel!')
# 创建布局管理器并将QLabel添加到布局中
layout = QVBoxLayout(window)
layout.addWidget(label)
  • 程序预览
    在这里插入图片描述

QLabel的基本用途

文本显示

使用 QLabel 可以轻松地显示文本,并且可以通过设置字体、颜色等属性进行自定义。在下面的示例中,我们设置了一个带有红色字体的文本标签:

self.label1 = QLabel(self)
self.label1.setText('<font color=red>这是一个文本控件</font>')
self.label1.setAutoFillBackground(True)
palette = QPalette()
palette.setColor(QPalette.Window, Qt.blue)
self.label1.setPalette(palette)
self.label1.setAlignment(Qt.AlignCenter)

创建了一个 QPalette 对象palette,将窗口(QPalette.Window)的颜色设置为蓝色,然后将该调色板应用到 self.label1。这样做可以修改 QLabel 的背景颜色,使其呈现为蓝色。

图像显示

QLabel 也可以用于显示图像。下面的代码演示了如何加载一张图像,并在 label2 中显示:

self.label2 = QLabel(self)
pixmap = QPixmap('./imgs/python.png')
new_pixmap = pixmap.scaled(self.label2.width(), self.label2.height())
self.label2.setPixmap(new_pixmap)
self.label2.setAlignment(Qt.AlignCenter)

在这个示例中,加载了一张图像,并使用 scaled 方法将图像缩放到 label2 的大小,然后将其设置为 QLabel 的内容。这里需要注意scaled是不会改变原来图形的,所以这里用new_pixmap接收缩放后的图片。

超链接

QLabel 支持显示超链接文本,并且可以通过连接信号来处理链接的悬停和点击事件。下面的代码展示了两个带有超链接的 QLabel:

self.label3 = QLabel(self)
self.label3.setText("<a href='#'>这是另一个文本控件</a>")
self.label4 = QLabel(self)
self.label4.setText("<a href='https://u.jd.com/HQ7HbhJ'>Python Qt GUI与数据可视化编程 pyqt5 教程书籍</a>")

在这个例子中,label3 的超链接指向页面内的锚点(#),而 label4 的超链接指向外部网址。还可以连接相应的槽函数来处理链接的悬停和点击事件:

self.label3.linkHovered.connect(self.on_linkHovered)
self.label4.linkActivated.connect(self.on_linkActivated)

信号处理

QLabel控件有两个信号linkHovered和linkActivated。用户点击了带有超链接的文本时触发linkActivated信号,鼠标悬停在带有超链接的文本上时触发linkHovered信号

在这里插入图片描述

链接的地址会作为槽函数的参数传递,帮助文档是C++的,python应该也一样

def on_linkActivated(self,link):
    print(f"Link Activated: {link}")
def on_linkHovered(self,link):
    print(f"link Hovered:{link}")

在这里,当用户悬停在超链接上时,on_linkHovered 方法会被调用;而当用户点击超链接时,on_linkActivated 方法会被调用,并传递链接地址作为参数。

  • 程序预览
    在这里插入图片描述

顺便提一下,label4上的链接是可以打开的,只要加上这行代码self.label4.setOpenExternalLinks(True)

使用 StyleSheet 设定 QLabel 样式

Qt样式表(Qt Style Sheets,QSS)是一种类似于 CSS(Cascading Style Sheets)的样式表语言,用于定义Qt应用程序中控件的外观和风格

self.label5.setText('这是设置了QSS的文本控件')
self.label5.setStyleSheet('''
                    background:#fff;
                    color:#f00;
                    font-size:20px;
                    font-weight:bold;
                    border:2px dashed #000;
                    padding:20px;
                    text-align:center;
                ''')

这段QSS样式的含义如下:

background: #fff; 设置背景颜色为白色。
color: #f00; 设置文本颜色为红色。
font-size: 20px; 设置字体大小为20像素。
font-weight: bold; 设置字体加粗。
border: 2px dashed #000; 设置2像素宽度的黑色虚线边框。
padding: 20px; 设置内边距为20像素。
text-align: center; 设置文本居中对齐。

  • 程序预览
    在这里插入图片描述

代码

import sys
from PyQt5.QtWidgets import QWidget,  QApplication,QLabel,QVBoxLayout
from PyQt5.QtGui import QPalette,QPixmap
from PyQt5.QtCore import Qt
class QLabelDemo(QWidget):
    def __init__(self):
        super(QLabelDemo, self).__init__()
        self.initUI()
    def initUI(self):
        self.setFixedSize(400,300)
        self.label1=QLabel(self)
        self.label2=QLabel(self)
        self.label3=QLabel(self)
        self.label4=QLabel(self)
        self.label5=QLabel(self)
        self.label1.setText('<font color=red>这是一个文本控件</font>')
        self.label1.setAutoFillBackground(True)
        palette=QPalette()
        palette.setColor(QPalette.Window,Qt.blue)
        self.label1.setPalette(palette)
        self.label1.setAlignment(Qt.AlignCenter)
        pixmap=QPixmap('./imgs/python.png')
        new_pixmap=pixmap.scaled(self.label2.width(),self.label2.height())#scaled doesn't modify the original QPixmap
        self.label2.setPixmap(new_pixmap)
        self.label2.setAlignment(Qt.AlignCenter)
        self.label3.setText("<a href='#'>这是另一个文本控件</a>")
        self.label4.setText("<a href='https://u.jd.com/HQ7HbhJ'>Python Qt GUI与数据可视化编程 pyqt5 教程书籍</a>")
        # self.label4.setOpenExternalLinks(True)
        self.label5.setText('这是设置了QSS的文本控件')
        self.label5.setStyleSheet('''
                    background:#fff;
                    color:#f00;
                    font-size:20px;
                    font-weight:bold;
                    border:2px dashed #000;
                    padding:20px;
                    text-align:center;
                ''')
        vlayout=QVBoxLayout(self)
        vlayout.addWidget(self.label1)
        vlayout.addWidget(self.label2)
        vlayout.addWidget(self.label3)
        vlayout.addWidget(self.label4)
        vlayout.addWidget(self.label5)
        self.label3.linkHovered.connect(self.on_linkHovered)
        self.label4.linkActivated.connect(self.on_linkActivated)
    def on_linkActivated(self,link):
        print(f"Link Activated: {link}")
    def on_linkHovered(self,link):
        print(f"link Hovered:{link}")
if __name__=='__main__':
    app=QApplication(sys.argv)
    demo=QLabelDemo()
    demo.show()

    sys.exit(app.exec_())
  • 15
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值