您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python怎么從GUI界面加載并顯示圖片”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python怎么從GUI界面加載并顯示圖片”文章能幫助大家解決問題。
【示例代碼】
# coding=utf-8
# @Auther : "鵬哥賊優秀"
# @Date : 2019/8/18
# @Software : PyCharm
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import requests
class Ui_Dialog(QtWidgets.QWidget):
def __init__(self):
super(Ui_Dialog, self).__init__()
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(561, 431)
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(70, 60, 75, 23))
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(100, 110, 341, 231))
self.label.setObjectName("label")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "打開圖片"))
self.label.setText(_translate("Dialog", "顯示圖片"))
self.pushButton.clicked.connect(self.show_urlimage)
# 從本地電腦加載圖片
def show_localimage(self):
imgName, imgType = QtWidgets.QFileDialog.getOpenFileName(self, "打開圖片", "", "*.jpg;;*.png;;All Files(*)")
pix = QtGui.QPixmap(imgName)
jpg = pix.scaled(self.label.width(), self.label.height())
self.label.setPixmap(jpg)
# 直接從網站中加載圖片
def show_urlimage(self):
url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1566126255397&di=e6038a03911121946883ce68aad6474e&imgtype=0&src=http%3A%2F%2Fnews.mydrivers.com%2FImg%2F20120227%2F2012022709173765.jpg"
r = requests.get(url)
print(r.content)
with open("1.jpg","wb")as f:
f.write(r.content)
pix = QtGui.QPixmap()
pix.loadFromData(r.content)
jpg = pix.scaled(self.label.width(), self.label.height())
self.label.setPixmap(jpg)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
main = QtWidgets.QDialog()
mainwindow = Ui_Dialog()
mainwindow.setupUi(main)
main.show()
sys.exit(app.exec())
【效果】
1、本地加載:
2、網站加載圖片
【知識點】
1、pyqt5中用什么控件顯示圖片?另外,加載顯示圖片的代碼流程又是怎么樣的?
答:示例代碼采用的是label控件,在其他博客中 看到Graphics組件好像也可以。另外,圖片加載的代碼流程如下圖(以本地圖片為例):
其中,pix.scaled()是為了將圖片大小進行縮放,用于適應Label組件的大小設置。
本地圖片和網絡圖片加載方式的不同:
1、獲取方式:網絡圖片通過request.get方式來訪問圖片,本地圖片是調用QFileDailog類來 加載圖片;
2、QPixmap加載數據:因為QPixmap()一般是直接加載圖片名稱的,要如何加載網絡圖片這塊,花了我挺多時間的,一直不知道要怎么解決QtGui.QPixmap(r.content)的報錯(content為byte型),后來才看到規避方法是:
pix.loadFromData(r.content)
2、遇到的坑:
(1)用Qt Designer制作的gui界面并轉化成py腳本的話,默認Ui_Dialog類是object,不會明顯注明繼承的父類,從而導致后面程序報錯。因此需要聲明下父類,這里QWidget(基類)或者QtWidgets.QDialog(對話類)都可以;
(2)剛 開始加載網絡圖片時,是這 樣寫的:
pix = QtGui.QPixmap().loadFromData(r.content),但是發現pix返回的是True,而不是具體加載圖片后的類。因此,二進制圖片數據的加載需要單獨寫一行。
(3)因為我是通過百度風景的方式,獲取圖片的。因此圖片的URL地址必須是能直接打開圖片,而不是有其他亂七八糟的網頁元素。解決方法只要右鍵圖片復制圖片地址就行。
3、引申知識(還沒怎么深入了解):
(1)如何寫圖片數據并保存:
with open("1.jpg","wb")as f:
f.write(r.content)
注意,這是如果是"w"是會報錯的。
(2)用PIL庫顯示圖片:
from PIL import Image
f = Image.open('1.jpg')
f.show()
f.save("new.jpg")
(3)用numpy庫圖片轉換成數組:
import numpy as np
res = np.array(Image.open("1.jpg"))
關于“Python怎么從GUI界面加載并顯示圖片”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。