PyQt5 系统化学习: QLabel

PyQt5 包含许多基础控件,组成了 GUI 的基本元素。

4 QLabel

参考:PyQt5 Tutorial - Label

QLabel 对象作为一个占位符可以显示不可编辑的文本、图片或者 GIF 动画等。当在QLabel 中使用 setText() 设置文本内容的时候,因为 QLabel 会尝试猜测它是将文本显示为纯文本还是作为 HTML4 标记的一部分的富文本。想明确地显示文本格式,请调用 setTextFormat(),例如如果您希望文本是纯文本格式,但无法控制文本源(例如,显示从Web上加载的数据时)。

QLabel 是 GUI 中的标签类,它继承自 QFrame(是 QWidget 的子类) 有如下方法:

方法 描述
setAlignment() 按固定值方式对齐文本。Qt.AlignLeft:水平方向靠左对齐;Qt.AlignRight:水平方向靠右对齐;Qt.AlignCenter:水平方向居中对齐;Qt.AlignJustify:水平方向调整间距两端对齐;Qt.AlignTop:垂直方向靠上对齐;Qt.AlignBottom:垂直方向靠下对齐;Qt.AlignVCenter:垂直方向居中对齐。
serIndent() 设置文本缩进值
setPixmap() 设置 QLabel 为一个 Pixmap 图片
text() 获得 Qlabel 的文本内容
setText() 设置 Qlabel 的文本内容
selectedText() 返回所选择的字符
setBuddy() 设置 QLabel 的助记符及 buddy(伙伴),及使用 Qlabel 设置快捷键,会在快捷键后将焦点设置到其 buddy 上,这里用到了 Qlabel 的交互控件功能,此外,buddy 可以是任何一个 widget 控件,使用 setBuddy(QWidget*) 设置,其 Qlabel 必须是文本内容,并且使用 “&” 符号设置了助记符
setWordWrap() 设置是否允许换行

Qlabel 类中的常用信号:

信号 描述
linkActiveted 当单击标签中的超链接,希望在新窗口打开这个超链接时,setOpenExternalLinks 特性必须设置为 True,即setOpenExternalLinks(True)
linkHovered 当鼠标指针滑过标签中嵌入的超链接时,需要用槽函数与这个信号进行绑定

先看一个简单的例子:

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

def basicWindow():
    app = QApplication(sys.argv)
    window = QWidget()
    labelA = QLabel(window)
    labelB = QLabel(window)
    labelA.setText('Label Example') # 文本
    labelB.setPixmap(QPixmap('paper.png')) # 图片
    window.setWindowTitle('Label Example')
    window.setGeometry(800, 300, 800, 700)
    labelA.move(100, 40) # 布局
    labelB.move(120, 120) # 布局
    window.show()
    sys.exit(app.exec_())

basicWindow()

显示:

图1 QLabel 简单例子

4.1 设置字体

也可以设置字体的大小和样式:

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

def basicWindow():
    app = QApplication(sys.argv)
    window = QWidget()
    labelA = QLabel(window)
    labelB = QLabel(window)
    labelA.setText('Times Font')
    labelA.setFont(QFont("Times", 12, QFont.Bold))
    labelB.setText('Arial Font')
    labelB.setFont(QFont("Arial", 14, QFont.Black))
    window.setWindowTitle('Label Example')
    window.setGeometry(800, 300, 300, 300)
    labelA.move(100, 40)
    labelB.move(120, 120)
    window.show()
    sys.exit(app.exec_())

basicWindow()

效果:

图2 QLabel 字体设置

4.2 对齐

默认情况下,标签显示左对齐、垂直居中的文本和图像。QLabel 的外观可以通过多种方式进行调整和微调。

可以使用 setAlignment()setIndent() 来调整 QLabel 小部件区域内的内容定位。文本内容还可以使用 setwordpwrap() 沿单词边界换行。

下面展示一个对齐的例子:

import sys
from PyQt5.QtWidgets import QWidget, QLabel, QApplication
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt


def basicWindow():
    app = QApplication(sys.argv)
    window = QWidget()
    labelLeft = QLabel(window)
    labelRight = QLabel(window)
    labelCenter = QLabel(window)

    labelLeft.setText('左对齐')
    labelRight.setText('右对齐')
    labelCenter.setText('居中对齐')

    window.setWindowTitle('标签对齐的例子')
    window.setGeometry(100, 100, 300, 200)

    labelLeft.setFixedWidth(160)
    labelRight.setFixedWidth(160)
    labelCenter.setFixedWidth(160)
    window.setGeometry(800, 300, 300, 300)
    # We could use CSS-alike style sheet to set the styles of the PyQt5 widgets.
    #  Here, the border of the label is set to be solid black with the border with of 1px,
    # and the border radius is specified as 25px.
    labelLeft.setStyleSheet("border-radius: 25px;border: 1px solid black;")
    labelRight.setStyleSheet("border-radius: 25px;border: 1px solid black;")
    labelCenter.setStyleSheet("border-radius: 25px;border: 1px solid black;")

    labelLeft.setAlignment(Qt.AlignLeft)
    labelRight.setAlignment(Qt.AlignRight)
    labelCenter.setAlignment(Qt.AlignCenter)

    labelLeft.move(80, 40)
    labelRight.move(80, 80)
    # 这个函数的意义就在于是否将缩放其内容以填充所有可用空间。
    # 当启用时,标签显示一个像素图,它将缩放像素图以填充可用空间。该属性的默认值是 False。
    labelCenter.setScaledContents(True)
    #labelCenter.move(80, 120)
    window.show()
    sys.exit(app.exec_())


basicWindow()

显示:

图3 对齐的例子

4.3 QLabel 的进阶

参考资源:Qt for Python Documentation

由于 QWidget --> QFrame --> QLabel 所以 QLabel 也可以作为一个窗口单独存在:

import sys
from PyQt5.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
label = QLabel("Hello World!")
label.show()
app.exec_()

效果:

图4 QLabel 作为一个窗口单独存在

传入 HTML 语法也是有效的:

# This HTML approach will be valid too!
label = QLabel("<font color=red size=40>Hello World!</font>")
图5 QLabel 传入 HTML 语法也是有效的

这段代码在右下角设置了一个双行文本的凹陷面板(两行与标签的右侧齐平):

from PyQt5.QtWidgets import QApplication, QLabel, QFrame
from PyQt5.QtCore import Qt

app = QApplication([])
label = QLabel()
label.resize(50,100)
label.setFrameStyle(QFrame.Panel | QFrame.Sunken)
label.setText("第一行\n第二行")
label.setAlignment(Qt.AlignBottom | Qt.AlignRight)
label.show()
app.exec_()

效果:

图6 QLabel 双行文本的凹陷面板
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353