一个小小的圣诞贺卡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import turtle as t
from turtle import *
from random import randint,random

def drawStars():
n = 100.0
for i in range(5): # 画五角星
forward(n / 5)
right(144) # 五角星的角度
forward(n / 5)
left(72) # 继续换角度
end_fill()
right(126)

def drawlight(): # 定义画彩灯的方法
if randint(0, 30) == 0: # 如果觉得彩灯太多,可以把取值范围加大一些,对应的灯就会少一些
color('tomato') # 定义第一种颜色
circle(6) # 定义彩灯大小
elif randint(0, 30) == 1:
color('orange') # 定义第二种颜色
circle(3) # 定义彩灯大小
else:
color('dark green') # 其余的随机数情况下画空的树枝



def tree(d, s): # 开始画树
if d <= 0: return
forward(s)
tree(d - 1, s * .8)
right(120)
tree(d - 3, s * .5)
drawlight() # 同时调用小彩灯的方法
right(120)
tree(d - 3, s * .5)
right(120)
backward(s)



def drawButtom():
for i in range(200): # 循环画最底端的小装饰
a = 200 - 400 * random()
b = 10 - 20 * random()
up()
forward(b)
left(90)
forward(a)
down()
if randint(0, 1) == 0:
color('tomato')
else:
color('wheat')
circle(2)
up()
backward(a)
right(90)
backward(b)


def writeWords(s_name,s_words,s_author):
t.color("dark red", "red") # 定义字体颜色
t.write("Merry Christmas", align="center", font=("Comic Sans MS", 40, "bold")) # 定义文字、位置、字体、大小
t.goto(-450,-290)
t.write("Hi,"+s_name, align="left", font=("Comic Sans MS", 20, "bold"))

t.goto(400,-330)
t.write(s_words,align="right", font=("Comic Sans MS", 20, "bold"))

t.goto(400,-370)
t.write(s_author, align="right", font=("Comic Sans MS", 20, "bold"))

t.goto(400,-400)
t.write("Dec,2021", align="right", font=("Comic Sans MS", 20, "bold"))


def drawsnow(): # 定义画雪花的方法
t.ht() # 隐藏笔头,ht=hideturtle
t.pensize(2) # 定义笔头大小
for i in range(200): # 画多少雪花
t.pencolor("white") # 定义画笔颜色为白色,其实就是雪花为白色
t.pu() # 提笔,pu=penup
t.setx(randint(-350, 350)) # 定义x坐标,随机从-350到350之间选择
t.sety(randint(-100, 350)) # 定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始
t.pd() # 落笔,pd=pendown
dens = 6 # 雪花瓣数设为6
snowsize = randint(1, 10) # 定义雪花大小
for j in range(dens): # 就是6,那就是画5次,也就是一个雪花五角星
# t.forward(int(snowsize)) #int()取整数
t.fd(int(snowsize))
t.backward(int(snowsize))
# t.bd(int(snowsize)) #注意没有bd=backward,但有fd=forward,小bug
t.right(int(360 / dens)) # 转动角度


# drawsnow() # 调用画雪花的方法
# t.done() # 完成,否则会直接关闭

if __name__=="__main__":
#定义各种参数
n = 100.0
delay(0)
t.speed("fastest") # 定义速度
screensize(bg='black') # 定义背景颜色,可以自己换颜色
left(90)
forward(3 * n)
color("orange", "yellow") # 定义最上端星星的颜色,外圈是orange,内部是yellow
begin_fill()
left(126)

# 开润
drawStars()

color("dark green") # 定义树枝的颜色
backward(n * 4.8)

tree(15, n)
backward(n / 2)

drawButtom()

# 雪花慢慢飘
delay(10)
s_name="FRIENDS"
s_words = "ᵀᵘʳⁿ ʸᵒᵘʳ ˢᵒᶜᵏˢ ᵒᵛᵉʳ, ⁱⁿˢⁱᵈᵉ ᵒᵘᵗ, ʰᵃⁿᵍ ᵗʰᵉᵐ ᵘᵖ, ᵃⁿᵈ ᵗʰᵉ ʷʰᵒˡᵉ ʷᵒʳˡᵈ ⁱˢ ʸᵒᵘʳ ᵍⁱᶠᵗ."
s_author="CutePepper"
writeWords(s_name, s_words, s_author)

drawsnow() # 调用画雪花的方法
t.done() # 完成,否则会直接关闭

打包EXE

Demo File Download Link

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 使用pyinstaller
#Demo
pyinstaller.exe -F -w -i "ico路径" FelizNavidad.py



#pyinstaller相关参数

-F, –onefile #打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用
-D, –onedir #打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码
-K, –tk vv#在部署时包含 TCL/TK
-a, –ascii #不包含编码.在支持Unicode的python版本上默认包含所有的编码.
-d, –debug #产生debug版本的可执行文件
-w,–windowed,–noconsole #使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效)
-c,–nowindowed,–console
#使用控制台子系统执行(默认)(只对Windows有效)

pyinstaller -c xxxx.py
pyinstaller xxxx.py --console

-s,–strip 可执行文件和共享库将run through strip.注意Cygwin的strip往往使普通的win32 Dll无法使用.
-X, –upx 如果有UPX安装(执行Configure.py时检测),会压缩执行文件(Windows系统中的DLL也会)(参见note)
-o DIR, –out=DIR 指定spec文件的生成目录,如果没有指定,而且当前目录是PyInstaller的根目录,会自动创建一个用于输出(spec和生成的可执行文件)的目录.如果没有指定,而当前目录不是PyInstaller的根目录,则会输出到当前的目录下.
-p DIR, –path=DIR 设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径,让pyinstaller自己去找程序需要的资源
–icon=<FILE.ICO>
将file.ico添加为可执行文件的资源(只对Windows系统有效),改变程序的图标
pyinstaller -i ico路径 xxxxx.py
–icon=<FILE.EXE,N> 将file.exe的第n个图标添加为可执行文件的资源(只对Windows系统有效)
-v FILE, –version=FILE 将verfile作为可执行文件的版本资源(只对Windows系统有效)
-n NAME, –name=NAME 可选的项目(产生的spec的)名字.如果省略,第一个脚本的主文件名将作为spec的名字

#在代码里面尽量不要用import
#尽量使用from...import...,因为如果是import的话,在打包的时候,会将整个包都打包到exe里面,没有意义的增大了工具的大小!