七夕,用Python给你送个钻石戒指

记录一起走过的那些日子

        2016年10月2日在一起到现在快6年了,也有了小宝宝,希望以后一家人开开心心,健康生活,各自实现自己的目标。

  • 上月陪你去买新的钻戒
  • 上周陪你去买新的对戒
  • 希望继续加油改善生活水平ヾ(✿゚▽゚)ノ

现在Python给你送个钻石戒指

        最近在学Python,那也用代码送个钻石戒指给你吧,哈哈~

一、效果演示

二、制作步骤/过程

(一)绘制戒指

        使用tkintercanvas画布绘制8个点,然后把这8个点使用canvas.create_line()划线函数用直线连接起来形成钻石形状。为了增强效果让钻石旋转起来,使用while循环,每隔一段时间重新绘制钻石,但绘制的起始角度偏转11.25度,这样运行程序钻石看上去就旋转起来了。

        绘制好钻石后,再使用canvas.create_oval()绘制两个椭圆作为戒指环就可以了。

(二)绘制雪花

        只有戒指单调了一点,来给画布添加点雪花。这里使用random.randint()函数每隔一段时间随机绘制50个10px大小的白色正方形,并绘制在画布上,这里看起来就好多了。这里绘制正方形使用到了canvas.create_rectangle()函数。

三、完整源代码文件

import time,random,math
from tkinter import Tk, Canvas


# 打开窗口
def open_window():
    _root = Tk()
    _root.title("七夕,用Python给你送个钻石戒指")
    _root.config(bg='black')
    # 设置画板
    _canvas = Canvas(_root, width=640, height=380, bg='black')
    _canvas.pack()
    # 待窗口创建后,2秒后执行动画
    _root.after(2000, paint_canvas(_root, _canvas))
    _root.mainloop()


# 启动动画函数
def paint_canvas(_tk, _canvas):
    # 设置钻石开始角度
    _start_angle = 0
    # 设置存放钻石八个点x,y坐标的列表
    _list_x, _list_y = [], []
    # 设置钻石八个点之间的角度_angel,钻石中心点x,y坐标_x_center,_y_center,钻石半径_r
    _angle, _x_center, _y_center, _r = 30, 320, 120, 50
    while True:
        # 清空画板
        _canvas.delete("all")
        # 画戒指
        paint_ring(_canvas, _start_angle, _angle, _x_center, _y_center, _r, _list_x, _list_y)
        _list_x.clear()
        _list_y.clear()
        # 从新计算钻石开始角度
        _start_angle = (_start_angle + 11.25) % 360
        # 画星星
        paint_star(_canvas)
        # 动画刷新时间间隔
        time.sleep(0.05)
        _canvas.update()
        _tk.update()


# 画戒指函数
def paint_ring(_canvas, _start_angle, _angle, _x_center, _y_center, _r, _list_x, _list_y):
    _canvas.create_oval(180, 110, 460, 280, outline='white')
    _canvas.create_oval(190, 130, 450, 275, outline='white')
    for i in range(12):
        _list_x.append(_x_center + _r * math.cos((_start_angle + (_angle * i)) * math.pi / 180))
        _list_y.append(_y_center + _r * math.sin((_start_angle + (_angle * i)) * math.pi / 180))
    for i in range(12):
        for j in range(12):
            _canvas.create_line(_list_x[i], _list_y[i], _list_x[j], _list_y[j], fill='white')


# 画雪花函数
def paint_star(_canvas):
    # 随机生成不超过画布长、宽的50个正方形点
    for i in range(50):
        x = random.randint(0, 630)
        y = random.randint(0, 370)
        _canvas.create_rectangle(x, y, x + 5, y + 5, fill='white')


if __name__ == '__main__':
    # 打开程序窗口
    open_window()

猜你喜欢

转载自blog.csdn.net/qq616491978/article/details/126159742