Python简单几步画个钻石戒指

作者:清远小阮 时间:2023-04-26 13:59:27 

一、效果演示

Python简单几步画个钻石戒指

二、制作步骤/过程

(一)绘制戒指

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

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

Python简单几步画个钻石戒指

(二)绘制雪花

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

Python简单几步画个钻石戒指

三、完整源代码文件

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()

来源:https://blog.csdn.net/qq616491978/article/details/126159742

标签:Python,钻石,戒指
0
投稿

猜你喜欢

  • PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解

    2022-04-18 16:28:45
  • 深入解析JavaScript框架Backbone.js中的事件机制

    2024-05-03 15:58:59
  • Python利用LyScript插件实现批量打开关闭进程

    2021-10-07 04:46:15
  • 在sql查询中使用表变量

    2024-01-23 10:25:59
  • Pytorch搭建YoloV4目标检测平台实现源码

    2021-01-21 19:02:52
  • 用Python分析3天破10亿的《我不是药神》到底神在哪?

    2023-04-29 06:16:26
  • js实现拖动缓动效果

    2024-04-29 13:44:28
  • Python程序设计入门(3)数组的使用

    2023-07-20 07:11:15
  • 清除代码异味

    2011-05-21 08:34:00
  • vue以组件或者插件的形式实现throttle或者debounce

    2024-05-09 15:23:55
  • 在Python的Bottle框架中使用微信API的示例

    2022-06-02 00:12:47
  • py3nvml实现GPU相关信息读取的案例分析

    2022-01-11 11:00:52
  • linux下导入、导出mysql数据库命令的实现方法

    2024-01-23 15:55:33
  • Vue.extend实现组件库message组件示例详解

    2024-05-09 15:09:26
  • python目标检测yolo1 yolo2 yolo3和SSD网络结构对比

    2022-05-24 16:16:39
  • Python有序查找算法之二分法实例分析

    2023-04-09 00:02:37
  • 在pytorch中如何查看模型model参数parameters

    2021-12-04 22:43:29
  • 400多行Python代码实现了一个FTP服务器

    2023-12-10 19:31:31
  • 返回页面顶部top按钮通过锚点实现(自写)

    2024-04-10 10:47:23
  • 深度解析Python线程和进程

    2023-04-19 01:08:16
  • asp之家 网络编程 m.aspxhome.com