• python生日贺卡制作以及细节问题的解决最后把python项目发布为exe可执行程序过程


    自己今天第一次做一个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

  • 相关阅读:
    帮助C#菜鸟进入SQL/XML开发
    汉字转换为拼音的函数
    水晶报表的使用技巧
    用DataSet操作XML
    frame,iframe,frameset 的区别(来源网络)
    oracle 数据库锁表解决方法
    c#日期类型的使用 (转)
    深入了解ViewState 深入了解ViewState
    js中top、parent、frame
    SQL中 inner join、 left join 、right join、 outer join之间的区别(来自百度自用)
  • 原文地址:https://www.cnblogs.com/isme-zjh/p/11647726.html
Copyright © 2020-2023  润新知