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>


分享到:


相關文章: