自己今天第一次做一个python生日贺卡:
效果图
参考之前有位大佬的作品,自己稍微的改造了一下下
首先:上程序
Birthday.py
""" --------------------------------------- Author:Zjh Date: 2019-10-10 09:05 --------------------------------------- """ #coding=utf-8 import turtle import random import time from turtle import * from random import * # set the background color for the page import time import pygame def make_cake(turtle,x=0, y=0): tina = turtle tina.penup() tina.color('white') tina.goto(x, y) tina.pendown() tina.begin_fill() tina.goto(x + 20, y) tina.goto(x + 20, y + 20) tina.goto(x - 20, y + 20) tina.goto(x - 20, y) tina.goto(x, y) tina.end_fill() tina.goto(x, y + 20) tina.color('blue') tina.goto(x, y + 35) tina.goto(x, y + 30) tina.color('black') tina.goto(x, y + 20) tina.penup() tina.goto(x, y + 10) file='media/front.mp3' pygame.mixer.init() #把mp3初始化出来 #print("播放音乐1") track = pygame.mixer.music.load(file) pygame.mixer.music.play() #time.sleep(60) #tommy.reset() bg = turtle.Screen() bg.bgcolor("black") tommy = turtle.Turtle() tommy.shape("turtle") tommy.speed(1) tommy.penup() tommy.goto(-250,0) tommy.color("orange") tommy.write(",,ԾㅂԾ,,请小寿星插上耳机后观看哦 ",font=('微软雅黑', 25, 'normal')) time.sleep(5) tommy.clear() x = -300 y = 250 tommy.goto(x,y) tommy.color("pink") pygame.mixer.music.stop() file='media/Happy.mp3' # pygame.mixer.init() #把mp3初始化出来 #print("播放音乐1") track = pygame.mixer.music.load(file) pygame.mixer.music.play() time.sleep(4) tommy.penup() tommy.goto(x,y-75-25-25-25-25-25-25-25-25-25-50-25) #每次减25 tommy.write(" φ(゜▽゜*)♪ 有“声音啦”,接下来我再增加点“五彩斑斓的颜色哦”。。。 ",font=('微软雅黑', 15, 'normal')) time.sleep(4) tommy.clear() tommy.pensize(6) # draw lines tommy.penup() tommy.goto(-190, -180) tommy.color("yellow") tommy.pensize(6) tommy.pendown() tommy.goto(190,-180) tommy.penup() tommy.penup() tommy.goto(-160, -150) tommy.color("purple") tommy.pensize(6) tommy.pendown() tommy.goto(160,-150) tommy.penup() tommy.penup() tommy.goto(-130, -120) tommy.color("teal") tommy.pensize(6) tommy.pendown() tommy.goto(130,-120) tommy.penup() # draw cake tommy.goto(-74,-110) #这个是画蛋糕 tommy.begin_fill() tommy.pendown() tommy.color("white") tommy.goto(50,-110) tommy.left(90) tommy.forward(60) tommy.left(90) tommy.forward(125) tommy.left(90) tommy.forward(60) tommy.end_fill() tommy.penup() tommy.goto(-74,-110) #这个是画蛋糕,到这个坐标去,这个是黄色那层 tommy.begin_fill() tommy.pendown() #放下画笔 tommy.color("yellow") tommy.goto(50,-110) tommy.left(90) #tommy.forward(60) #向前60码,这个是那个横线 tommy.left(90) tommy.forward(45) #这个是一层的厚度 tommy.left(90) #这个是根据角度来转方像 tommy.forward(125) tommy.left(90) #这个是根据角度来转方像 tommy.forward(45) tommy.end_fill() tommy.penup() tommy.goto(-74,-110) #这个是画蛋糕,到这个坐标去,这个是黄色那层 tommy.begin_fill() tommy.pendown() #放下画笔 tommy.color("#40E0D0") tommy.goto(50,-110) tommy.left(90) #tommy.forward(60) #向前60码,这个是那个横线 tommy.left(90) tommy.forward(30) #这个是一层的厚度 tommy.left(90) #这个是根据角度来转方像 tommy.forward(125) tommy.left(90) #这个是根据角度来转方像 tommy.forward(30) tommy.end_fill() tommy.penup() tommy.goto(-74,-110) #这个是画蛋糕,到这个坐标去,最下面那层 tommy.begin_fill() tommy.pendown() #放下画笔 tommy.color("#BA55D3") tommy.goto(50,-110) tommy.left(90) #tommy.forward(60) #向前60码,这个是那个横线 tommy.left(90) tommy.forward(15) #这个是一层的厚度 tommy.left(90) #这个是根据角度来转方像 tommy.forward(125) tommy.left(90) #这个是根据角度来转方像 tommy.forward(15) tommy.end_fill() tommy.penup() #draw candles tommy.goto(-60, -40) tommy.color("aquamarine") tommy.pendown() tommy.pensize(3) tommy.goto(-60, -20) tommy.penup() tommy.goto(-40, -40) tommy.color("yellow") tommy.pendown() tommy.pensize(3) tommy.goto(-40, -20) tommy.penup() tommy.goto(-20, -40) tommy.color("green") tommy.pendown() tommy.pensize(3) tommy.goto(-20, -20) tommy.penup() tommy.goto(0, -40) tommy.color("red") tommy.pendown() tommy.pensize(3) tommy.goto(0, -20) tommy.penup() tommy.goto(20, -40) tommy.color("blue") tommy.pendown() tommy.pensize(3) tommy.goto(20, -20) tommy.penup() tommy.goto(40, -40) tommy.color("#556B2F") tommy.pendown() tommy.pensize(3) tommy.goto(40, -20) tommy.penup() # print message bg.bgcolor("pink") def snow(): tommy.hideturtle() tommy.speed(100) tommy.pensize(2) for i in range(100): r=random() g=random() b=random() tommy.pencolor(r,g,b) tommy.penup() tommy.setx(randint(-350,350)) tommy.sety(randint(1,270)) tommy.pendown() dens=randint(8,12) snowsize=randint(10,14) for j in range(dens): tommy.forward(snowsize) tommy.backward(snowsize) tommy.right(360/dens) snow() tommy.goto(-250, 90) tommy.color("orange") tommy.pendown() tommy.write( "漫天 。・゚・(ノД`)ヽ(゚Д゚ ) 烟花送给你~",font=('微软雅黑', 24, 'normal')) pygame.mixer.music.stop() file='media/sweet.mp3' #print("播放音乐1") track = pygame.mixer.music.load(file) pygame.mixer.music.play() time.sleep(4) tommy.penup() tommy.goto(-250,-250) tommy.write("祝你生日快乐哟,小寿星 ο(=•ω<=)p⌒☆!",font=('微软雅黑', 24, 'normal')) time.sleep(5) # send the turtle to the corner tommy.penup() tommy.goto(-250, 250) #tommy.exitonclick() tommy.hideturtle() time.sleep(20) tommy.clear() #清空屏幕了,然后设置背景色为黑色,滚动演员表 bg.bgcolor("white") tommy.penup() tommy.goto(-300, 90) tommy.color("black") tommy.pendown() tommy.write(" …(⊙_⊙;)…天呐!是不是很好看呀?坚持看到了这里",font=('微软雅黑', 24, 'normal')) tommy.penup() tommy.goto(-300, 60) tommy.write(" (〃` 3′〃)那好咯,后面还有一点点结尾!",font=('微软雅黑', 24, 'normal')) tommy.penup() time.sleep(4) tommy.goto(-250, 90) tommy.clear() tommy.write("(python友情支持)就是我啦 ┑( ̄Д  ̄)┍ ",font=('微软雅黑', 24, 'normal')) time.sleep(4) # tommy.clear() # tommy.write("音乐 、后期、导演、声优、编辑、构思 ",font=('微软雅黑', 24, 'normal')) # time.sleep(4) # # tommy.clear() # tommy.write("♂ 是你那不善言辞的大猪蹄子男票 ",font=('微软雅黑', 24, 'normal')) # time.sleep(4) # tommy.clear() tommy.write("(◍•ᴗ•◍)ゝ特用此小程序祝你生日快乐~ ",font=('微软雅黑', 24, 'normal')) time.sleep(4) tommy.clear() tommy.write("( ◜◡‾) 天天开心~ ☻ ",font=('微软雅黑', 24, 'normal')) time.sleep(4) tommy.clear() tommy.write("最后biu 一个小心心给你把~",font=('微软雅黑', 24, 'normal')) time.sleep(3) #这儿最后画一个小心心, tommy.clear() #coding=utf-8 #画一个圆的东西出来 import turtle #turtle = tommy turtle.speed(1) turtle.pensize(6)#:设置画笔的宽度; turtle.left(30) turtle.circle(90,300) #半径大小 #画眼睛 turtle.right(100) turtle.forward(60) turtle.left(150) turtle.forward(55) turtle.right(110) turtle.forward(40) turtle.penup() turtle.goto(-15,90) #画眼睛了 turtle.begin_fill() turtle.color("black") turtle.circle(8) turtle.end_fill() turtle.penup() turtle.goto(-75,90) #画眼睛了 turtle.begin_fill() turtle.color("black") turtle.circle(8) turtle.end_fill() turtle.penup() turtle.goto(0,70) #画眼睛了 turtle.begin_fill() turtle.color("red") turtle.circle(8) turtle.end_fill() turtle.penup() turtle.goto(-85,70) #画眼睛了 turtle.begin_fill() turtle.color("red") turtle.circle(8) turtle.end_fill() turtle.penup() turtle.goto(-50,50) #画眼睛了 # turtle.begin_fill() turtle.pendown() turtle.color("black") turtle.left(45) turtle.circle(20,90) # turtle.end_fill() #画另一只手 turtle.penup() turtle.color("black") turtle.goto(0,0) turtle.right(35) turtle.pendown() turtle.forward(75) turtle.left(85) turtle.forward(25) turtle.right(165) turtle.forward(25) turtle.left(90) turtle.forward(35) turtle.right(155) turtle.forward(35) turtle.left(75) turtle.forward(20) turtle.right(85) turtle.forward(20) turtle.right(85) turtle.forward(25) turtle.left(70) turtle.forward(35) turtle.left(15) turtle.forward(20) turtle.left(60) turtle.forward(40) #爱心 # turtle.begin_fill() turtle.penup() turtle.color("red") turtle.right(180) turtle.goto(135,135) turtle.pendown() turtle.circle(20,170) turtle.forward(15) turtle.left(45) turtle.forward(55) turtle.penup() turtle.color("red") turtle.right(250) turtle.goto(135,135) turtle.pendown() turtle.circle(-20,170) turtle.forward(15) turtle.right(45) turtle.forward(55) # turtle.end_fill() turtle.penup() turtle.goto(135,135) turtle.pendown() # turtle.right(90) turtle.forward(45) turtle.left(160) turtle.forward(75) turtle.right(160) turtle.forward(55) turtle.goto(135,100) turtle.penup() turtle.goto(-100,-100) turtle.write("The end",font=("微软雅黑",24,"normal")) time.sleep(2) done() #可以使窗口保持 pygame.mixer.music.stop()
理解完成之后想要在自己的笔记上面跑起来:结果出了好几个小小的问题
问题1:我安装是Python3.6.3的版本,但是直接运行程序的话提示没有pygame 模块,所以自己就在自己Pycharm中进行下载,但是搜索都搜索不到,所以就到cmd中去利用pip命令去安装了
pip命令去安装:
下载地址:https://pypi.org/
搜索pygame,转到pygame1.9.6之后点击pygame1.9.6,然后转到另一个界面
转到下面的界面,之后选择cp36的下载即可,因为自己安装的python是64位的,所以下载了最后一个pygame-1.9.6-cp36-cp36m-win_amd64.whl
由于自己的之后黑窗口安装
打开cmd命令窗口,通过“pip install"命令安装pygame安装包。当然的pip命令最好是在whl文件所在的目录下面,这样的话可以输入几个开头字母之后自动补全
pip install pygame-1.9.6-cp36-cp36m-win_amd64.whl
检测是否安装成功,在cmd命令窗口下,输入”python“,进入python交互命令窗口,输入”import pygame“,如果运行成功,表示安装成功。
之后运行成功
最后想要到别的电脑上也能够运行,所以就想将程序打成exe可执行程序
接下来说干就干
大家都知道,Python是一种脚本语言,也就是解释型的语言,需要解释器来进行解释以后才可以执行,而Python源代码需要在Python虚拟机上面运行,但是我们做好的程序,不可能给用户使用的时候还让他安装一个Python环境,所以今天我们讲解如何将Python程序打包为exe可执行文件。
提示: 以下的教程都是再有Python环境的基础上的,如果没有安装,请先参考:Python安装以及环境变量配置
一、安装pyinsatller
打开命令行窗口,输入如下指令
pip3 install pyinstaller
然后静待pyinstaller自动安装好
但是自己在安装pyinstaller的过程中出现了问题
问题解决加上参数 --no-use-pep517
pip3 install pyinstaller --no-use-pep517
成功的安装了 输入pyinstaller --version去验证是否成功,显示版本也就是成功了
如果还未解决的话,可以继续的参考链接解决哦 https://blog.csdn.net/qq_26561157/article/details/89812450
二、使用pyinstaller打包Python程序(参考链接https://blog.csdn.net/qq_33462307/article/details/90479045)
①在你的Python程序文件夹上(不点进去)按住shift并且右键,在弹出的选项中点击"在此处打开命令行窗口"或者“在此处打开PowerShell窗口”
在上面的目录下按住shift 之后右键选择打开powershell
下面的是自己的界面:
>>>或者先进入命令行窗口,然后使用cd指令进入程序文件夹,示例:
cd E:课件python数据分析与数据挖掘数据挖掘方法及应用Python数据挖掘程序Gp201820192BigDataBirthdayFinal
②输入以下指令,开始打包
pyinstaller -F -w (-i icofile) filename
filename表示你的Python程序文件名
-w 表示隐藏程序运行时的命令行窗口(不加-w会有黑色窗口)
括号内的为可选参数,-i icofile表示给程序加上图标,图标必须为.ico格式 icofile表示图标的位置,建议直接放在程序文件夹里面,这样子打包的时候直接写文件名就好
具体的将文件改为.ico格式的工具网站 http://www.bitbug.net/
接着 pyinstaller -F -w (-i icofile) filename 命令输入完成,按回车,就会开始自动打包了,第一次打包过程可能比较缓慢
输入示例:
pyinstaller -F -w -i birth.ico Birthday.py
(pyinstaller中的各个参数的含义:https://blog.csdn.net/weixin_39000819/article/details/80942423)
打成exe成果的效果
然后我们进入到程序目录里面会再看到一个名称为dist目录,打包好的exe程序就在里面
注意:如果原本的程序中使用到了相应的资源,需要复制到dist目录下,否则程序会无法运行
比如我这里在程序中使用到了好多的音频,所以就需要将该文件放到dist目录下,我这里是在dist目录下新建了一个目录:media,把那些文件放了进去
形成exe目录在之后的结构
最后进入到自己的dist目录下,点击exe程序即可启动程序,具体的程序效果可见链接 https://www.bilibili.com/video/av53114885
如果点击exe程序,出现错误弹出框
Pygame使用pyinstaller打包exe无法运行,显示 failed to execute script的问题
原因剖析
pygame需要的资源如图片音乐等pyinstaller是不会给你打包的,需手动加入
本来自己用pyinstaller 形成的dist命令是没有依赖的那些mp3和图片等文件的,自己需要去加入到和exe一样的dist目录下,如果不加入的话会提示 failed to execute script