给看到的人一个惊喜吧~ 程序通过PyQt5实现,运行本程序需要下载相应的资源(UI界面可以自行设计),可前往GitHub下载打包后的程序。GitHub地址:https://github.com/Miko-servax/ChristmasPresents/releases/tag/Python
主程序
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton
from PyQt5 import uic
from PyQt5.QtCore import *
from PyQt5.QtGui import QIcon
from threading import Thread
import ChristmasTree
import DrawBDD
import drawSnow
import sys
import os
import rc_aaa
import time
qmut_3 = QMutex()
class Thread_3(QThread):
_signal =pyqtSignal()
def __init__(self):
super().__init__()
def run(self):
qmut_3.lock() # 加锁
drawSnow.snow()
import pygame
play()
qmut_3.unlock() # 解锁
self._signal.emit()
class mainUI:
# _startThread = pyqtSignal()
def __init__(self):
# 从文件中加载UI定义
self.ui = uic.loadUi("Christmas2.ui")
self.ui.setFixedSize(self.ui.width(), self.ui.height())
self.ui.button1.clicked.connect(self.drawOne)
self.ui.button2.clicked.connect(self.drawTwo)
self.ui.button3.clicked.connect(self.click_3)
# self.ui.label.setText("圣诞快乐!")
self.ui.exitButton.clicked.connect(app.instance().quit)
def drawOne(self):
self.ui.label.setText("圣诞快乐!")
ChristmasTree.drawmain()
python = sys.executable
os.execl(python, python, *sys.argv)
def drawTwo(self):
self.ui.label.setText("圣诞快乐!")
DrawBDD.drawBDD()
python = sys.executable
os.execl(python, python, *sys.argv)
def click_3(self):
self.ui.button3.setEnabled(False)
self.ui.thread_3 = Thread_3()
self.ui.thread_3._signal.connect(self.set_btn3)
# play()
self.ui.thread_3.start()
def set_btn3(self):
self.ui.button3.setEnabled(True)
def playmusic():
import os
from mutagen.mp3 import MP3
"""播放音乐。"""
Path = r'qrc\\music'
try:
list1 = os.listdir(Path) # 获取指定路径下所有的 mp3 文件
for x in list1:
if not (x.endswith('.mp3')):
list1.remove(x)
list2 = []
for i in list1:
s = os.path.join(Path, i) # 对路径与文件进行拼接
list2.append(s)
while True:
# 获取每一首歌的时长
for n in list2:
path = n
audio = MP3(path)
music_volume = 10
pygame.mixer.init() # 初始化所有引入的模块
pygame.mixer.music.set_volume(music_volume/100.0)
pygame.mixer.music.load(path) # 载入音乐,音乐可以是 ogg、mp3 等格式
pygame.mixer.music.play() # 播放载入的音乐
time.sleep(int(audio.info.length)) # 获取每一首歌曲的时长,使程序存活的时长等于歌曲时长
except Exception as e:
print("Exception: %s" % e)
def play():
import pygame
m = Thread(target=playmusic)
m.setDaemon(True)
m.start() # 启动线程
if __name__ == '__main__':
import pygame
app = QApplication([])
app.setWindowIcon(QIcon('icon.jpg'))
# play()
m = Thread(target=playmusic)
m.setDaemon(True)
m.start() # 启动线程
app.setQuitOnLastWindowClosed(False)
stats = mainUI()
stats.ui.setWindowFlags(Qt.WindowMinimizeButtonHint)
stats.ui.show()
app.exec_()
圣诞树
import turtle as t
from turtle import *
import random as r
#画彩灯
def drawlight():
if r.randint(0,30) == 0:
color('tomato')
circle(6)
elif r.randint(0,30) == 1:
color('orange')
circle(3)
else:
linewidth = 5
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 xzs():
for i in range(200):
a = 200-400*r.random()
b = 10-20*r.random()
up()
forward(b)
left(90)
forward(a)
down()
if r.randint(0,1)==0:
color('tomato')
else:
color('wheat')
circle(2)
up()
backward(a)
right(90)
backward(b)
def h(r):
l = 2 * r
t.left(45)
t.forward(l)
t.circle(r, 180)
t.right(90)
t.circle(r, 180)
t.forward(l)
#画雪花
def drawsnow():
t.hideturtle()
t.pensize(2)
for i in range(150):
t.pencolor("white")
t.penup()
t.setx(r.randint(-350,350))
t.sety(r.randint(-100,350))
t.pendown()
dens = 6
snowsize = r.randint(1,10)
for j in range(dens):
t.forward(int(snowsize))
t.backward(int(snowsize))
t.right(int(360/dens))
# t.bye()
def drawmain():
# t.bye()
# t.Turtle._screen = None # force recreation of singleton Screen object
# t.TurtleScreen._RUNNING = True # only set upon TurtleScreen() definition
n = 100.0
t.pensize(10)
speed("fastest")
t.screensize(800,600,"black")
left(90)
forward(3*n)
color("orange","yellow")
begin_fill()
left(126)
#画五角星
for i in range(5):
forward(n/5)
right(144)
forward(n/5)
left(72)
end_fill()
right(126)
color("dark green")
backward(n*4.8)
tree(15,n)
backward(n/2)
xzs()
t.color("dark red","red")
t.write("Merry Christmas", align="center", font=("Comic Sans MS", 40, "bold"))
# t.penup()
# t.goto(0,200) #设置起点位置
# t.pendown()
# t.right(90)
# t.right(180)
# t.penup()
# t.forward(50)
# t.pendown()
# t.right(180)
# t.write("sukidayo", align="center", font=("Comic Sans MS", 20, "bold"))
# t.right(90)
# t.penup()
# t.forward(100)
# t.pendown()
# t.left(90)
# t.pencolor("dark red")
# t.color("dark red")
# t.begin_fill()
# h(18)
# t.end_fill()
drawsnow()
t.done()
冰墩墩
import turtle
def drawBDD():
# turtle.bye()
turtle.setup(800,600)
turtle.speed(10) # 速度
# 轮廓
# 头顶
turtle.penup()
turtle.goto(-73, 230)
turtle.pencolor("lightgray")
turtle.pensize(3)
turtle.fillcolor("white")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(20)
turtle.circle(-250, 35)
# 左耳
turtle.setheading(50)
turtle.circle(-42, 180)
# 左侧
turtle.setheading(-50)
turtle.circle(-190, 30)
turtle.circle(-320, 45)
# 左腿
turtle.circle(120, 30)
turtle.circle(200, 12)
turtle.circle(-18, 85)
turtle.circle(-180, 23)
turtle.circle(-20, 110)
turtle.circle(15, 115)
turtle.circle(100, 12)
# 右腿
turtle.circle(15, 120)
turtle.circle(-15, 110)
turtle.circle(-150, 30)
turtle.circle(-15, 70)
turtle.circle(-150, 10)
turtle.circle(200, 35)
turtle.circle(-150, 20)
# 右手
turtle.setheading(-120)
turtle.circle(50, 30)
turtle.circle(-35, 200)
turtle.circle(-300, 23)
# 右侧
turtle.setheading(86)
turtle.circle(-300, 26)
# 右耳
turtle.setheading(122)
turtle.circle(-53, 160)
turtle.end_fill()
# 左手
turtle.penup()
turtle.goto(177, 112)
turtle.pencolor("lightgray")
turtle.pensize(3)
turtle.fillcolor("white")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(80)
turtle.circle(-45, 200)
turtle.circle(-300, 23)
turtle.end_fill()
# 左手内
turtle.penup()
turtle.goto(182, 95)
turtle.pencolor("black")
turtle.pensize(1)
turtle.fillcolor("black")
turtle.begin_fill()
turtle.setheading(95)
turtle.pendown()
turtle.circle(-37, 160)
turtle.circle(-20, 50)
turtle.circle(-200, 30)
turtle.end_fill()
# 右耳内
turtle.penup()
turtle.goto(-130, 180)
turtle.pencolor("black")
turtle.pensize(1)
turtle.fillcolor("black")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(120)
turtle.circle(-28, 160)
turtle.setheading(210)
turtle.circle(150, 20)
turtle.end_fill()
# 左耳内
turtle.penup()
turtle.goto(90, 230)
turtle.setheading(40)
turtle.begin_fill()
turtle.pendown()
turtle.circle(-30, 170)
turtle.setheading(125)
turtle.circle(150, 23)
turtle.end_fill()
# 右手内
turtle.penup()
turtle.goto(-180, -55)
turtle.fillcolor("black")
turtle.begin_fill()
turtle.setheading(-120)
turtle.pendown()
turtle.circle(50, 30)
turtle.circle(-27, 200)
turtle.circle(-300, 20)
turtle.setheading(-90)
turtle.circle(300, 14)
turtle.end_fill()
# 左腿内
turtle.penup()
turtle.goto(108, -168)
turtle.fillcolor("black")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(-115)
turtle.circle(110, 15)
turtle.circle(200, 10)
turtle.circle(-18, 80)
turtle.circle(-180, 13)
turtle.circle(-20, 90)
turtle.circle(15, 60)
turtle.setheading(42)
turtle.circle(-200, 29)
turtle.end_fill()
# 右腿内
turtle.penup()
turtle.goto(-38, -210)
turtle.fillcolor("black")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(-155)
turtle.circle(15, 100)
turtle.circle(-10, 110)
turtle.circle(-100, 30)
turtle.circle(-15, 65)
turtle.circle(-100, 10)
turtle.circle(200, 15)
turtle.setheading(-14)
turtle.circle(-200, 27)
turtle.end_fill()
# 右眼
# 眼圈
turtle.penup()
turtle.goto(-64, 120)
turtle.begin_fill()
turtle.pendown()
turtle.setheading(40)
turtle.circle(-35, 152)
turtle.circle(-100, 50)
turtle.circle(-35, 130)
turtle.circle(-100, 50)
turtle.end_fill()
# 眼珠
turtle.penup()
turtle.goto(-47, 55)
turtle.fillcolor("white")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(0)
turtle.circle(25, 360)
turtle.end_fill()
turtle.penup()
turtle.goto(-45, 62)
turtle.pencolor("darkslategray")
turtle.fillcolor("darkslategray")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(0)
turtle.circle(19, 360)
turtle.end_fill()
turtle.penup()
turtle.goto(-45, 68)
turtle.fillcolor("black")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(0)
turtle.circle(10, 360)
turtle.end_fill()
turtle.penup()
turtle.goto(-47, 86)
turtle.pencolor("white")
turtle.fillcolor("white")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(0)
turtle.circle(5, 360)
turtle.end_fill()
# 左眼
# 眼圈
turtle.penup()
turtle.goto(51, 82)
turtle.fillcolor("black")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(120)
turtle.circle(-32, 152)
turtle.circle(-100, 55)
turtle.circle(-25, 120)
turtle.circle(-120, 45)
turtle.end_fill()
# 眼珠
turtle.penup()
turtle.goto(79, 60)
turtle.fillcolor("white")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(0)
turtle.circle(24, 360)
turtle.end_fill()
turtle.penup()
turtle.goto(79, 64)
turtle.pencolor("darkslategray")
turtle.fillcolor("darkslategray")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(0)
turtle.circle(19, 360)
turtle.end_fill()
turtle.penup()
turtle.goto(79, 70)
turtle.fillcolor("black")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(0)
turtle.circle(10, 360)
turtle.end_fill()
turtle.penup()
turtle.goto(79, 88)
turtle.pencolor("white")
turtle.fillcolor("white")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(0)
turtle.circle(5, 360)
turtle.end_fill()
# 鼻子
turtle.penup()
turtle.goto(37, 80)
turtle.fillcolor("black")
turtle.begin_fill()
turtle.pendown()
turtle.circle(-8, 130)
turtle.circle(-22, 100)
turtle.circle(-8, 130)
turtle.end_fill()
# 嘴
turtle.penup()
turtle.goto(-15, 48)
turtle.setheading(-36)
turtle.begin_fill()
turtle.pendown()
turtle.circle(60, 70)
turtle.setheading(-132)
turtle.circle(-45, 100)
turtle.end_fill()
# 彩虹圈
turtle.penup()
turtle.goto(-135, 120)
turtle.pensize(5)
turtle.pencolor("cyan")
turtle.pendown()
turtle.setheading(60)
turtle.circle(-165, 150)
turtle.circle(-130, 78)
turtle.circle(-250, 30)
turtle.circle(-138, 105)
turtle.penup()
turtle.goto(-131, 116)
turtle.pencolor("slateblue")
turtle.pendown()
turtle.setheading(60)
turtle.circle(-160, 144)
turtle.circle(-120, 78)
turtle.circle(-242, 30)
turtle.circle(-135, 105)
turtle.penup()
turtle.goto(-127, 112)
turtle.pencolor("orangered")
turtle.pendown()
turtle.setheading(60)
turtle.circle(-155, 136)
turtle.circle(-116, 86)
turtle.circle(-220, 30)
turtle.circle(-134, 103)
turtle.penup()
turtle.goto(-123, 108)
turtle.pencolor("gold")
turtle.pendown()
turtle.setheading(60)
turtle.circle(-150, 136)
turtle.circle(-104, 86)
turtle.circle(-220, 30)
turtle.circle(-126, 102)
turtle.penup()
turtle.goto(-120, 104)
turtle.pencolor("greenyellow")
turtle.pendown()
turtle.setheading(60)
turtle.circle(-145, 136)
turtle.circle(-90, 83)
turtle.circle(-220, 30)
turtle.circle(-120, 100)
turtle.penup()
turtle.penup()
turtle.goto(220, 115)
turtle.pencolor("brown")
turtle.pensize(1)
turtle.fillcolor("brown")
turtle.begin_fill()
turtle.pendown()
turtle.setheading(36)
turtle.circle(-8, 180)
turtle.circle(-60, 24)
turtle.setheading(110)
turtle.circle(-60, 24)
turtle.circle(-8, 180)
turtle.end_fill()
turtle.hideturtle()
turtle.done()
雪花
import pygame
import random
def snow():
# 初始化pygame
pygame.init()
# 根据背景图片的大小,设置屏幕长宽
SIZE = (1364, 569)
screen = pygame.display.set_mode(SIZE)
pygame.display.set_caption("Snow Animation")
bg = pygame.image.load('snow.jpg')
# 雪花列表
snow_list = []
# 初始化雪花:[x坐标, y坐标, x轴速度, y轴速度]
for i in range(200):
x = random.randrange(0, SIZE[0])
y = random.randrange(0, SIZE[1])
sx = random.randint(-1, 1)
sy = random.randint(3, 6)
snow_list.append([x, y, sx, sy])
clock = pygame.time.Clock()
# 游戏主循环
done = False
while not done:
# 消息事件循环,判断退出
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
# 黑背景/图片背景
# screen.fill((0, 0, 0))
screen.blit(bg, (0, 0))
# 雪花列表循环
for i in range(len(snow_list)):
# 绘制雪花,颜色、位置、大小
pygame.draw.circle(screen, (255, 255, 255), snow_list[i][:2], snow_list[i][3]-3)
# 移动雪花位置(下一次循环起效)
snow_list[i][0] += snow_list[i][2]
snow_list[i][1] += snow_list[i][3]
# 如果雪花落出屏幕,重设位置
if snow_list[i][1] > SIZE[1]:
snow_list[i][1] = random.randrange(-50, -10)
snow_list[i][0] = random.randrange(0, SIZE[0])
# 刷新屏幕
pygame.display.flip()
clock.tick(20)
# 退出
pygame.quit()
Comments | NOTHING