python製作愛心照片牆的代碼分析及優化

1.說明:

1.1 推薦指數:★★★★

1.2 python的思維和代碼分析,基礎複習,列表和推導式。

1.3 注意安裝相關庫,推薦python3.8和微軟vscode,本機是deepin-linux操作系統,windows可能在文件路徑上注意修改。


python製作愛心照片牆的代碼分析及優化


2 效果圖:

可以換成自己的照片、或者家人,女朋友或老婆,男朋友或者老公。


python製作愛心照片牆的代碼分析及優化

3 圖片準備

3.1 準備20張jpg的照片

3.2 因為jpg一般比較大,需要壓縮大小,建議60×60,也可以自定義。

3.3 批量壓縮圖片大小的代碼:lxpic.py

<code>from PIL import Image
import os.path
import glob

#照片尺寸大小
def Resize(file, outdir, width, height):
imgFile = Image.open(file)
try:
newImage = imgFile.resize((width, height), Image.BILINEAR) #更改尺寸
newImage.save(os.path.join(outdir, os.path.basename(file))) #輸出保存圖片
except Exception as e:
print(e)

# 圖片所在的目錄,可自定義res的20張原先準備的圖片,因為比較大
for file in glob.glob("/home/xgj/res/*.jpg"):
# 新圖片存放的目錄,根目錄下的new文件夾,60和60是修改後的圖片大小
Resize(file, "new", 60, 60) /<code>

4 loveinit.py代碼:

<code># coding:utf-8
#---導出模塊---
import sys
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import *
#---初始化定義---
app = QApplication(sys.argv)
win = QWidget()

win.resize(760, 540)
win.move(0, 0)
layout=QGridLayout(win)
#---定義函數---
def positionSet():
#按鈕定義
b1=QLabel(win)
#路徑自己定義,可以修改
b1.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(1)+".jpg"))

b2=QLabel(win)
b2.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(2)+".jpg"))

b3=QLabel(win)
b3.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(3)+".jpg"))

b4=QLabel(win)
b4.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(4)+".jpg"))

b5=QLabel(win)
b5.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(5)+".jpg"))

b6=QLabel(win)
b6.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(6)+".jpg"))

b7=QLabel(win)
b7.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(7)+".jpg"))

b8=QLabel(win)
b8.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(8)+".jpg"))

b9=QLabel(win)
b9.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(9)+".jpg"))

b10=QLabel(win)
b10.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(10)+".jpg"))

b11=QLabel(win)
b11.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(11)+".jpg"))

b12=QLabel(win)
b12.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(12)+".jpg"))

b13=QLabel(win)
b13.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(13)+".jpg"))

b14=QLabel(win)
b14.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(14)+".jpg"))

b15=QLabel(win)
b15.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(15)+".jpg"))

b16=QLabel(win)
b16.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(16)+".jpg"))

b17=QLabel(win)
b17.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(17)+".jpg"))

b18=QLabel(win)
b18.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(18)+".jpg"))

b19=QLabel(win)
b19.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(19)+".jpg"))

b20=QLabel(win)
b20.setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(20)+".jpg"))

#座標佈局
layout.addWidget(b1, 0, 3)
layout.addWidget(b2, 0, 7)
layout.addWidget(b3, 1, 2)
layout.addWidget(b4, 1, 4)
layout.addWidget(b5, 1, 6)
layout.addWidget(b6, 1, 8)
layout.addWidget(b7, 2, 1)
layout.addWidget(b8, 2, 5)
layout.addWidget(b9, 2, 9)
layout.addWidget(b10, 3, 0)
layout.addWidget(b11, 3, 10)
layout.addWidget(b12, 4, 1)
layout.addWidget(b13, 4, 9)
layout.addWidget(b14, 5, 2)
layout.addWidget(b15, 5, 8)
layout.addWidget(b16, 6, 3)
layout.addWidget(b17, 6, 7)
layout.addWidget(b18, 7, 4)
layout.addWidget(b19, 7, 6)
layout.addWidget(b20, 8, 5)

#---執行---注意這裡沒有if name main格式函數---
#if __name__=='__main__': #如果這一行註釋掉,那麼下面的4行代碼需要向左移動頂左線邊
positionSet()
win.setWindowTitle('GUI')
win.show()
sys.exit(app.exec_())/<code>

4.1 上述代碼,分析if __name__=='__main__':

這是一個判斷,假如採用,則判斷是假的,那麼它就不執行。很多時候發現沒有這個判斷也可以使用。網上也有很多解釋,建議採用if的這個判斷,但是如果為了學習某些個代碼,可以簡化去掉。

4.2 發現代碼很多是重複的,那麼python的有點就是重複的事情可以採用推導式,簡化,對不對?

這就是python的思維。

5 修改後簡潔的代碼:lovewall.py

<code># coding:utf-8
import sys
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import *

app = QApplication(sys.argv)
win = QWidget()
win.resize(760, 540)
win.move(0, 0)
layout=QGridLayout(win)

#定義三個列表
z=[]
#座標列表,代表位置,對應的x和y的位置
x=[0,0,1,1,1,1,2,2,2,3,3,4,4,5,5,6,6,7,7,8]
y=[3,7,2,4,6,8,1,5,9,0,10,1,9,2,8,3,7,4,6,5]

#定義函數

def positionSet():
#推導式圖片按鈕定義
for i in range(1,21):
z.append('b+str(i)')
z[i-1]=QLabel(win)
#注意文件夾地址適當調整
z[i-1].setPixmap(QPixmap("/home/xgj/Desktop/love/new/"+str(i)+".jpg"))

#推導式圖片位置佈局
for i in range(21):
layout.addWidget(z[i-1],x[i-1],y[i-1])

positionSet()
win.setWindowTitle('GUI')
win.show()
sys.exit(app.exec_())/<code>


分享到:


相關文章: