python生日贺卡制作以及细节问题的解决

自己今天第一次做一个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数据挖掘\程序\Gp201820192\BigData\BirthdayFinal

②输入以下指令,开始打包

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

猜你喜欢

转载自www.cnblogs.com/isme-zjh/p/11647726.html