0
点赞
收藏
分享

微信扫一扫

Python案例2—12万字的Tkinter库绘制五角星(全版本)

_鱼与渔_ 2022-03-16 阅读 93

绘制五角星的配图


项目导入–绘制五角星V_1.0


版本V1.0 :用turtle库在Python中绘制五角星

项目分析—理清思路


  • 引入图形绘制的turtle库(import turtle)

  • 利用turtle库中的函数实现五角星的绘制
    绘制五角星V1.0思维导图

知识点学习–万丈高楼平地起


Turtle库绘图坐标体系


Turtle库绘图坐标体系


上机编程–动动手,让程序运行起来


参照代码


"""
作者:白菜胡萝丸子
版本1.0:使用turtle库在python中绘制五角星
"""

import turtle


def main():

    turtle.speed(1)
    # 绘制五角星的第一条边
    turtle.forward(100)
    turtle.right(144)

    # 绘制五角星的第二条边
    turtle.forward(100)
    turtle.right(144)
    # 绘制五角星的第三条边
    turtle.forward(100)
    turtle.right(144)
    # 绘制五角星的第四条边
    turtle.forward(100)
    turtle.right(144)
    # 绘制五角星的第五条边
    turtle.forward(100)
    turtle.right(144)

    turtle.exitonclick()


if __name__ == "__main__":
    main()

执行结果


在这里插入图片描述

更上一层楼–让程序进化一点点


  • 在V1.0版本绘制五角星的程序中你发现了什么问题?是不是又很多重复的代码,请尝试利用循环结构使代码更加简约

项目导入–绘制五角星V_2.0


版本2.0:观察V1.0版本的程序代码,是否能用while循环使版本1.0更加简洁

项目分析—理清思路


在这里插入图片描述

知识点学习–万丈高楼平地起


循环语句

  • 控制程序的语句
  • 判断程序确定一段程序是否再次执行一次或者多次
  • 使用方法
while(<条件>)<语句块1>
<语句块2>
  • 当条件为真(True)时,执行语句块1,当语句为假(Flase),退出循环

上机编程–动动手,让程序运行起来


参照代码


"""
作者:白菜胡萝丸子
版本2.0:观察V1.0版本的程序代码,是否能用while循环使版本1.0更加简介
"""
import turtle


def main():
    # 设置画笔绘制速度
    turtle.speed(2)
    # 设置循环的判断条件
    i = 0

    # 绘制五角星的循环语句
    while i < 5:
        turtle.forward(100)
        turtle.right(144)

        i = i + 1
    # 设置点击关闭窗口
    turtle.exitonclick()


if __name__ == "__main__":
    main()

执行结果


绘制五角星

更上一层楼–让程序进化一点点



项目导入–绘制五角星V_3.0


版本3.0:将五角星的绘制封装到函数里,进而使程序更加模块化

项目分析—理清思路


流程图


知识点学习–万丈高楼平地起


函数的调用过程

  • 调用程序再调用函数处暂停执行

  • 调用时将参数(实参)赋值给参数(形参)

  • 执行函数体

  • 返回执行结果,回到调用处继续执行

上机编程–动动手,让程序运行起来


参照代码


"""
作者:白菜胡萝丸子
版本3.0:将五角星的绘制封装到函数里,进而使程序更加模块化
"""
import turtle


def pentagram(side_length):
    i = 0
    while i < 5:
        turtle.forward(side_length)
        turtle.right(144)
        i = i + 1


def main():
    turtle.speed(10)
    side = 100
    pentagram(side)

    turtle.exitonclick()


if __name__ == "__main__":
    main()

执行结果


绘制五角星

更上一层楼–让程序进化一点点



项目导入–绘制五角星V_4.0


版本4.0:绘制不同大小的重复五角星,设置五角星边的颜色和填充颜色

项目分析—理清思路


流程图

知识点学习–万丈高楼平地起


画笔控制函数

  • turtle.penup()
    抬起画笔,滞后移动画笔不会绘制图形
  • turtle.pendown()
    落下画笔,滞后移动,画笔绘制图形
  • turtle.pensize()
    设置画笔宽度
  • turtle.pencolor()
    设置画笔颜色
  • turtle.pencolormode(255)
    设置RGB色彩模式 turtle.color(255,255,255)
  • turtle.fillcolor(), turtle.begin_fill(), turtle.end_fill()
    填充颜色

上机编程–动动手,让程序运行起来


参照代码


"""
作者:白菜胡萝丸子
版本V4.0:绘制不同大小的重复的五角星,设置五角星的颜色,填充颜色,画笔的粗细
"""


import turtle


# 设置绘制五角星的函数
def pentagram(side_length):
    i = 1
    while i <= 5:
        turtle.forward(side_length)
        turtle.right(144)
        i = i + 1


# 设置主函数
def main():
    # 设置初始五角星的边长和速度
    size = 100

    # 设置五角星绘制的速度
    turtle.speed(2)

    # 设置绘制的颜色
    turtle.colormode(255)
    turtle.pencolor((255 , 0 , 0))

    # 设置绘制画笔的粗细
    turtle.pensize(2)

    # 设置移动画笔的初始位置
    turtle.penup()
    turtle.backward(100)
    turtle.pendown()

    # 设置填充的颜色
    turtle.fillcolor('red')



    # 绘制重复五角星
    while size <= 250:
        turtle.begin_fill()

        pentagram(size)

        turtle.end_fill()
        size = size + 50

    # 点击关闭窗口
    turtle.exitonclick()


# 调用主函数
if __name__ == '__main__':
    main()

执行结果


五角星

更上一层楼–让程序进化一点点


如果想要程序更加灵活,即实现用户决定重复绘制几次五角星以及五角星的大小,该如何改造代码?
在这里插入图片描述
彩虹星星


项目导入–绘制五角星V_5.0


版本V5.0:实现用户决定重复绘制五角星的次数,五角星的大小,填充颜色等

项目分析—理清思路


在这里插入图片描述

知识点学习–万丈高楼平地起


知识点复习

  • input函数
  • while循环
  • 函数的定义与调用

上机编程–动动手,让程序运行起来


参照代码


"""
作者:白菜胡萝丸子
版本V5.0:实现用户决定重复绘制五角星的次数,五角星的大小,填充颜色等
"""


import turtle


# 设置绘制五角星的函数
def pentagram(side_length):
    i = 1
    while i <= 5:
        turtle.forward(side_length)
        turtle.right(144)
        i = i + 1


# 设置主函数
def main():
    # 用户输入五角星的初始边长,重复次数,每重复一次增加的长度
    side_length = float(input('您好,请您输入重复五角星的初始边长'))
    num = float(input('您好,请您输入准备重复绘制五角星的次数'))
    add_side_length = float(input('您好,请您输入每次重复绘制五角星增加的长度:'))
    side_color = input('您好,请您输入绘制五角星的边长颜色:')

    # 设置五角星的颜色
    turtle.pencolor(side_color)

    # 设置循环控制变量
    order = 1

    while order <= num:
        pentagram(side_length)
        side_length = side_length + add_side_length
        order = order + 1
    # 点击关闭窗口
    turtle.exitonclick()


# 调用主函数
if __name__ == '__main__':
    main()

执行结果


绘制五角星

更上一层楼–让程序进化一点点



项目导入–绘制五角星V_6.0


版本6.0:使用递归函数实现重复五角星的绘制

项目分析—理清思路


绘制五角星V_6.0

知识点学习–万丈高楼平地起


def digui (num)				#定义递归函数
	print(num)				#输出当前教字
	if num>0:				#判断当前数字是否>0
		digui(nun-1)		#调用函数本身
	else:
		print('----')
	print (num)				#再次输出当前数字
digui(3)
#运行过程
digui (3)
	print (3)
	if 3>0:
 		digui (2):		#调用函数本身
 		print(2)
		if 2>0
			digui(1) 	#调用函数木身
 			print (1if 1>0
 				digui (0):	#调用函数本身
 				print (0)
				if 0>0:
 				digui(num-1)	#调用函数本身
 				else :
 					print ('---')
 				print (0)
			print(1) 
 	print (2)
 print (3)


上机编程–动动手,让程序运行起来


参照代码


"""
作者:白菜胡萝丸子
版本6.0:使用递归函数实现重复五角星的绘制
"""

import turtle


def pentagram(side_length):
    i = 0
    while i < 5:
        turtle.forward(side_length)
        turtle.right(144)
        i = i + 1
    side_length = side_length + 100
    if side_length <= 500:
        pentagram(side_length)


def main():
    turtle.speed(10)
    side = 100
    pentagram(side)

    turtle.exitonclick()


if __name__ == "__main__":
    main()

执行结果


绘制五角星

更上一层楼–让程序进化一点点



项目导入–绘制五角星V_7.0


版本7.0:使用tkinter库的canvas控件绘制五角星

项目分析—理清思路


引入tkinter
按照绘图步骤进行图形绘制
使用tkinter库中的Canvas控件进行绘图

注:Python提供了多个图形界面开发的库,tkinter是其中的一个,引入tkinter库以后可以快速的创建GUI ( Graphic User Interface)应用程序。

知识点学习–万丈高楼平地起


上机编程–动动手,让程序运行起来


参照代码


""""
作者:白菜胡萝丸子
版本7.0:使用tkinter库的canvas控件绘制五角星
"""

import tkinter
import math

top = tkinter.Tk()
top.title("绘制五角星")
c = tkinter.Canvas(top, bg="pink", height="300", width="300")

# 使用canvas控件绘制五角星
r = 150
center_x = 150
center_y = 150

polygon = c.create_polygon(
    # 左上点
    center_x - (r*math.sin(2 * math.pi / 5)),
    center_y - (r*math.cos(2 * math.pi / 5)),
    # 右上点
    center_x + (r*math.sin(2 * math.pi / 5)),
    center_y - (r*math.cos(2 * math.pi / 5)),
    # 左下点
    center_x - (r*math.sin(math.pi / 5)),
    center_y + (r*math.cos(math.pi / 5)),
    # 顶点
    center_x,
    center_y - r,
    # 右下点
    center_x + (r*math.sin(math.pi / 5)),
    center_y + (r*math.cos(math.pi / 5)),
    fill="red"
)

# 消息主循环
c.pack()
top.mainloop()

执行结果


组件绘制五角星

更上一层楼–让程序进化一点点


举报

相关推荐

0 条评论