本篇 ShengYu 介紹 Python PyQt5 QPixmap 用法與範例,QPixmap 是專門處理繪圖的類別,顯示影像到螢幕裝置上,在這篇我們將會介紹如何使用 QPixmap 來讀取圖片並顯示出來。
以下的 Python PyQt5 QPixmap 用法與範例將分為這幾部分,
- PyQt5 QPixmap 讀取圖片並顯示在 QLabel 上
- PyQt5 用按鈕來觸發 QPixmap 讀取圖片顯示在 QLabel 上
- PyQt5 QPixmap 用檔案對話框開啟圖片並顯示在 QLabel 上
PyQt5 QPixmap 讀取圖片並顯示在 QLabel 上
QPixmap 跟之前介紹的 Widget 不一樣,之前都是使用 QtWidgets 裡的元件,而 QPixmap 則是 QtGui 裡專門處理繪圖的類別,實際上要使用 QPixmap 時要配合著 QLabel 或者 QAbstractButton 的延伸類別(例如QPushButton)一起使用,
QPixmap 支援的影像格式有:BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、XBM 和 XPM。
QImage 是為 I/O 或圖片 pixel 像素存取而設計的。如果你想要存取圖片的像素或是修改圖片像素,則需要使用 QImage,
這邊示範 PyQt5 QPixmap 基本用法,這邊先示範一個 label 搭配 QPixmap 使用,self.mypixmap = QPixmap('lena.jpg')
建構 QPixmap 同時傳入圖片檔名讀取圖片,接著再用 QLabel.setPixmap()
將該 QPixmap 設定給 mylabel,如果目錄下沒有 lena.jpg 這張圖片的話則會顯示空白的 label,範例如下,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QLabel)
from PyQt5.QtGui import QPixmap
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)
layout = QVBoxLayout()
self.setLayout(layout)
self.mylabel = QLabel('this is an image', self)
layout.addWidget(self.mylabel)
self.mypixmap = QPixmap('lena.jpg')
self.mylabel.setPixmap(self.mypixmap)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())
結果圖如下,
PyQt5 用按鈕來觸發 QPixmap 讀取圖片顯示在 QLabel 上
這邊介紹 PyQt5 用按鈕事件來讓 QPixmap 讀取圖片,
QPixmap 讀取圖片的方法不只一種,除了可以使用 self.mypixmap = QPixmap('lena.jpg')
建構 QPixmap 的同時順便讀取圖片外,也可以先建構 QPixmap()
再用 QPixmap.load()
讀取圖片,
要判斷有沒有讀取圖片成功的話可以使用 QPixmap.isNull()
來進行判斷,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLabel, QPushButton)
from PyQt5.QtGui import QPixmap
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)
layout = QGridLayout()
self.setLayout(layout)
self.mylabel = QLabel('click button to load image', self)
layout.addWidget(self.mylabel, 0, 0, 1, 2)
self.mybutton1 = QPushButton('load image', self)
self.mybutton1.clicked.connect(self.loadImageAndShow)
layout.addWidget(self.mybutton1, 1, 0)
def loadImageAndShow(self):
print('load image...')
# self.mypixmap = QPixmap('lena.jpg')
# or
self.mypixmap = QPixmap()
self.mypixmap.load('lena.jpg')
if self.mypixmap.isNull():
print('load image failed')
return
self.mylabel.setPixmap(self.mypixmap)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())
結果圖如下,
PyQt5 QPixmap 用檔案對話框開啟圖片並顯示在 QLabel 上
這邊示範 QPixmap 用檔案對話框開啟圖片並顯示在 QLabel 上,在 QFileDialog.getOpenFileName()
裡指定 png、jpg、jpeg 或 bmp 檔案類型,QFileDialog.getOpenFileName()
詳細的檔案對話框細節請參考這篇,接著將取得的 filename 判斷是不是為空,否則的話就進行建構 QPixmap 與讀取圖片檔,之後顯示在 label 上,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout,
QLabel, QPushButton, QFileDialog)
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import QCoreApplication
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)
layout = QGridLayout()
self.setLayout(layout)
self.mylabel = QLabel('click button to open image', self)
layout.addWidget(self.mylabel, 0, 0, 1, 2)
self.mybutton1 = QPushButton('open image', self)
self.mybutton1.clicked.connect(self.openImageAndShow)
layout.addWidget(self.mybutton1, 1, 0)
self.mybutton2 = QPushButton('exit', self)
self.mybutton2.clicked.connect(QCoreApplication.instance().quit)
layout.addWidget(self.mybutton2, 1, 1)
def openImageAndShow(self):
print('QFileDialog.getOpenFileName')
filename, _ = QFileDialog.getOpenFileName(
self,
filter='Image Files (*.png *.jpg *.jpeg *.bmp)')
if not filename:
print('filename is empty')
return
print('load image...')
self.mypixmap = QPixmap(filename)
if self.mypixmap.isNull():
print('load image failed')
return
self.mylabel.setPixmap(self.mypixmap)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())
結果圖如下,
以上就是 Python PyQt5 QPixmap 用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
其它參考
QPixmap Class | Qt GUI 5
https://doc.qt.io/qt-5/qpixmap.html