QLabel 标签
QLabel 是 PyQt6 里用来建立文字或图片的标签元件,这篇教学会介绍如何在 PyQt6 视窗里加入 QLabel 标签,并进行像是文字字型、大小、颜色和位置...等参数设定。
快速导览:
因为 Google Colab 不支援 PyQt6,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
加入 QLabel 标签
建立 PyQt6 视窗对象后,透过 QtWidgets.QLabel(widget) 方法,就能在指定的元件中建立标签,下方的程序码执行后,会加入一个 QLabel 标签,并使用 setText() 方法加入文字。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(320, 240)
label = QtWidgets.QLabel(Form) # 在 Form 裡加入標籤
label.setText('hello world') # 設定標籤文字
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(320, 240)
self.ui()
def ui(self):
self.label = QtWidgets.QLabel(self) # 在 Form 裡加入標籤
self.label.setText('hello world') # 設定標籤文字
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
QLabel 位置设定
透过下列 QLabel 方法,可以将 QLabel 元件定位到指定的位置:
| 方法 | 参数 | 说明 |
|---|---|---|
| move() | x, y | 设定 QLabel 在摆放的父元件中的 xy 座标,x 往右为正,y 往下为正,尺寸根据内容自动延伸。 |
| setGeometry() | x, y, w, h | 设定 QLabel 在摆放的父元件中的 xy 座标和长宽尺寸,x 往右为正,y 往下为正,如果超过长宽尺寸,默认会被裁切无法显示。 |
| setContentsMargins() | left, top, right, bottom | QLabel 的边界宽度。 |
下方的程序码执行后会放入两个 QLabel,一个使用 move() 定位在 (50,50) 位置,另外一个使用 setGeometry() 方法定位在 (50, 80) 的位置并设定大小为 100x100。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(320, 240)
label1 = QtWidgets.QLabel(Form)
label1.setText('hello world, how are you?')
label1.move(50, 50)
label2 = QtWidgets.QLabel(Form)
label2.setText('hello world, how are you?')
label2.setGeometry(50, 80, 100, 100)
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(320, 240)
self.ui()
def ui(self):
self.label1 = QtWidgets.QLabel(self)
self.label1.setText('hello world, how are you?')
self.label1.move(50, 50)
self.label2 = QtWidgets.QLabel(self)
self.label2.setText('hello world, how are you?')
self.label2.setGeometry(50, 80, 100, 100)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
QLabel 文字设定
透过下列常用的 QLabel 方法,可以设定 QLabel 中的文字样式 ( 设定字体需要搭配 QtGui,设定对齐要搭配 QtCore,需要额外加载对应模组 ):
| 方法 | 参数 | 说明 |
|---|---|---|
| setWordWrap() | bool | 是否换行,默认 Fasle 不换行,设定 True 换行。 |
| setAlignment() | QtCore.Qt.AlignmentFlag | 对齐方式,默认 QtCore.Qt.AlignmentFlag.AlignCenter,可设定 QtCore.Qt.AlignmentFlag.AlignRight、QtCore.Qt.AlignmentFlag.AlignLeft ( 此处与 PyQt5 不同 )。 |
| setFont() | QtGui.QFont() | 文字样式设定,需搭配 QtGui.QFont()。 |
使用 QtGui.QFont() 产生的文字样式,可以使用下列方法设定:
| 方法 | 参数 | 说明 |
|---|---|---|
| font.setFamily() | name | 字体名称。 |
| setPointSize | int | 字体大小。 |
| setBold() | bool | 是否粗体,默认 False。 |
| setItalic() | bool | 是否斜体,默认 False。 |
| setStrikeOut() | bool | 是否加入删除线,默认 False。 |
| setUnderline() | bool | 是否加入底线,默认 False。 |
下方的程序码执行后,打开的视窗中会出现一个设定过样式的 QLabel。
from PyQt6 import QtWidgets, QtGui, QtCore
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(320, 240)
label = QtWidgets.QLabel(Form)
label.setText('hello world, how are you?')
label.setGeometry(30, 30, 100, 100)
label.setContentsMargins(0,0,0,0) # 設定邊界
label.setWordWrap(True) # 可以換行
label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) # 對齊方式
font = QtGui.QFont() # 建立文字樣式元件
font.setFamily('Verdana') # 設定字體
font.setPointSize(20) # 文字大小
font.setBold(True) # 粗體
font.setItalic(True) # 斜體
font.setStrikeOut(True) # 刪除線
font.setUnderline(True) # 底線
label.setFont(font) # 設定文字樣式
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets, QtGui, QtCore
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(320, 240)
self.ui()
def ui(self):
self.label = QtWidgets.QLabel(self)
self.label.setText('hello world, how are you?')
self.label.setGeometry(30, 30, 100, 100)
self.label.setContentsMargins(0,0,0,0) # 設定邊界
self.label.setWordWrap(True) # 可以換行
self.label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) # 對齊方式
font = QtGui.QFont() # 建立文字樣式元件
font.setFamily('Verdana') # 設定字體
font.setPointSize(20) # 文字大小
font.setBold(True) # 粗體
font.setItalic(True) # 斜體
font.setStrikeOut(True) # 刪除線
font.setUnderline(True) # 底線
self.label.setFont(font) # 設定文字樣式
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
QLabel 加入图片
如果要在 QLabel 里加入图片,需要先使用 QtGui.QImage() 方法读取图片,接着使用 setPixmap() 方法加入图片,详细步骤可以参考下方程序码:
from PyQt6 import QtWidgets, QtGui
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(320, 240)
label = QtWidgets.QLabel(Form)
label.setGeometry(20, 20, 200, 150)
img = QtGui.QImage('mona.jpg') # 讀取圖片
label.setPixmap(QtGui.QPixmap.fromImage(img)) # 加入圖片
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets, QtGui, QtCore
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(320, 240)
self.ui()
def ui(self):
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(20, 20, 200, 150)
img = QtGui.QImage('mona.jpg') # 讀取圖片
self.label.setPixmap(QtGui.QPixmap.fromImage(img)) # 加入圖片
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
使用 StyleSheet 设定 QLabel 样式
如果会使用网页 CSS 语法,就能透过 setStyleSheet() 设定 QLabel 样式,在设计样式上也较为弹性好用,下方的程序码执行后,会套用 CSS 样式语法,实现一个黑色虚线外框的 QLabel ( 不支援 CSS3 相关语法 )。
from PyQt6 import QtWidgets, QtGui
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(320, 240)
label = QtWidgets.QLabel(Form)
label.setText('hello world, how are you?')
label.setGeometry(20, 20, 200, 150)
label.setWordWrap(True) # 設定可以換行
label.setStyleSheet('''
background:#fff;
color:#f00;
font-size:20px;
font-weight:bold;
border:2px dashed #000;
padding:20px;
text-align:center;
''')
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets, QtGui, QtCore
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(320, 240)
self.ui()
def ui(self):
self.label = QtWidgets.QLabel(self)
self.label.setText('hello world, how are you?')
self.label.setGeometry(20, 20, 200, 150)
self.label.setWordWrap(True) # 設定可以換行
self.label.setStyleSheet('''
background:#fff;
color:#f00;
font-size:20px;
font-weight:bold;
border:2px dashed #000;
padding:20px;
text-align:center;
''')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
微信扫码关注
抖音扫码关注