Python PyQt5 QPixmap 用法與範例

本篇 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,範例如下,

python-pyqt-qpixmap.py
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() 來進行判斷,

python-pyqt-qpixmap2.py
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 上,

python-pyqt-qpixmap3.py
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

其它相關文章推薦
Python 新手入門教學懶人包
Python PyQt5 新手入門教學