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())
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~