PyQt5 包含许多基础控件,组成了 GUI 的基本元素。
4 QLabel
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()
显示:
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()
效果:
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()
显示:
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_()
效果:
传入 HTML 语法也是有效的:
# This HTML approach will be valid too!
label = QLabel("<font color=red size=40>Hello World!</font>")
这段代码在右下角设置了一个双行文本的凹陷面板(两行与标签的右侧齐平):
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_()
效果: