利用turtle库绘制图形---Python

本文介绍了如何使用Python的turtle库绘制各种图形,包括无角四边形、七段数码管等,并详细阐述了如何通过pyinstaller将Python代码打包成exe文件,包括常见问题及解决方案,如图标设置、命令窗口去除等。
摘要由CSDN通过智能技术生成

引入turtle库

pip3 install 库名

1.在cmd里安装pyintsaller包

第一步安装将Python代码转成exe的工具包–pyinstaller:需要打开cmd,然后在cmd里输入一行命令即可

pip install pyinstaller
如果觉得安装太慢,还可以加入国内镜像下载pyinstaller,一共有六个国内镜像地址,你选择一个加入进去即可:

清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
cmd中加入国内镜像下载工具包命令:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

或者

pip3 install pyinstaller

2.在cmd里输入打包成exe的命令

安装好pyinstaller工具包后,首先要在cmd里跳转地址到Python代码所在的文件地址,然后输入以下命令,即可将Python代码转成exe,并生成一个名为dist的文件夹,在文件夹中可以找到刚打包完成的exe

pyinstaller -F xxxx.py(要打包的py文件)
pyinstaller -D xxxx.py(要打包的py文件)

功能注释:
-F 打包成一个文件
-D 打包成一个文件夹
-n 重新命名
–noconsole 去掉cmd命令窗口
-i 加入图标,图标需要是ico格式
打包举例:1.打包时候修改文件名,2.运行时候不显示命令窗口,3.改变游戏图标

例如pyinstaller -F -i tupian.ico main.py -n 游戏名字 --noconsole

3.问题总结

3.1 一闪而过怎么办?
原因: 打包的源 码或环境 有问题
解决办法:打包成有命令窗口的exe,并将exe在cmd里运行,运行不成功会显示报错信息,然后根据报错信息修改

3.2 打包后的文件太大怎么办?
原因:在python导包的时候,将包的全部函数打包成exe了

解决办法:这里需要在代码里更改导包方式,例如将import sys改为from sys import exit

3.3 缺少相关素材
将码所有涉及到素材的文件都改成绝对路径(针对本台电脑)

将相关素材的路径换成相对路径,并将所有素材和exe放到一个文件夹下(针对移植exe)

3.4 关于图标的ico文件去哪里转
在这个网址可以将图片转成ico图标 http://www.bitbug.net/

3.5 图标加载进去不显示怎么办
刷新界面或者将exe文件复制粘贴到其它路径下就能看到

4.pyintsaller --help

关于pyinstaller功能最最最全面的解释,可以在cmd里直接使用命令得到:

在Python里面调用turtle

import turtle

当然也可以 from<库名> as <库别名>
使用from和import保留字共同完成:from<库名> import <函数名> from<库名>import*
<库名>.<函数名>(<函数参数>)

turtle命令

运动命令

函数 说明
turtle.forward(distance) 向前移动距离distance代表距离
turtle.backward(distance) 向后移动距离distance代表距离
turtle.right(degree) 相对应当前画笔方向向右转动degree度
turtle.left(degree) 相对应当前画笔方向向左转动degree度
turtle. setheading(degree) 相对x轴正方向,海龟逆时针朝向转动degree度
turtle.goto(x,y) 将画笔移动到坐标为(x,y)的位置
turtle.speed(speed) 画笔绘制的速度范围[0,10]整数
turtle.pendown() 放下画笔,移动时绘制图形,缺省时也为绘制
turtle. penup() 提起笔移动,不绘制图形,用于另起一个地方绘制
turtle. circle(radius, extent) 绘制一个圆形,其中radius为半径,extent为度数,例如若extent为180,则画一个半圆;如要画一个圆形,可不必写第二个参数
turtle. setx(a) 将当前x轴移动到指定位置(垂直方向移动)
turtle. sety(b) 将当前x轴移动到指定位置(垂直方向移动)
turtle.home() 设置当前画笔位置为原点,朝向东,即x轴正向
turtle. dot(radius,color) 绘制一个指定直径和颜色的圆点

画笔控制命令

函数 说明
turtle.fillcolor(colorstring) 绘制图形的填充颜色
turtle.color(colorl,color2) 同时设置 pencolor=colorl,fillcolor=color2
turtle. filling() 返回当前是否在填充状态
turtle. begin_fill() 准备开始填充图形
turtle.end_fill() 填充完成
turtle. hideturtle( ) 隐藏画笔的 turtle 形状
turtle. showturtle() 显示画笔的 turtle形状
turtle. fillcolor(colorstring) 绘制图形的填充颜色

全局控制命令

函数 说明
turtle. clear() 清空 turtle画的笔迹
turtle. reset() 清空窗口,重置turtle状态为起始状态
turtle.undo() 撤销上一个 turtle 动作
turtle.isvisible() 返回当前turtle是否可见
turtle.stamp() 复制当前图形
turtle.write (s[,font =(“font-name”,font_size,“font_type”)]) 写文本,s为文本内容,font是字体的参数,里面分别为字体名称、大小和类型;font为可选项,font的参数也是可选项

例子及其效果图

无角四边形

在这里插入图片描述

import turtle
turtle.goto(40,0)
turtle.penup()
turtle.goto(50,-10)
turtle.pendown()
turtle.goto(50,-90)
turtle.penup()
turtle.goto(40,-100)
turtle.pendown()
turtle.goto(-40,-100)
turtle.penup()
turtle.goto(-50,-90)
turtle.pendown()
turtle.goto(-50,-10)
turtle.penup()
turtle.goto(-40,0)
turtle.pendown()
turtle.goto(0,0)

或者

import turtle
for i in range(4):
    turtle.forward(80)
    turtle.penup()
    turtle.forward(10)
    turtle.right(90)
    turtle.forward(10)
    turtle.pendown()

根据当前时间绘制七段数码管

在这里插入图片描述

import turtle
import time
def drawGap():
    turtle.penup()
    turtle.fd(5)
def drawLine(draw):
    drawGap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    drawGap()
    turtle.right(90)
def drawDigit(digit):
    drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,6,8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
    turtle.left(180)
    turtle.penup()
    turtle.fd(20)
def drawDate(date):
    turtle.pencolor("gold") if date[-1]=='@' else turtle.pencolor("red")
    for i in date:
        if i=='-':
            turtle.right(90)
            turtle.fd(18)
            turtle.left(90)
            turtle.write('年',font=("Arial",18,"normal"))
            turtle.pencolor("green")
            turtle.left(90)
            turtle.fd(18)
            turtle.right(90)
            turtle.fd(40)
        elif i=='=':
            turtle.right(90)
            turtle.fd(18)
            turtle.left(90)
            turtle.write('月',font=("Arial",18,"normal"))
            turtle.pencolor("blue")
            turtle.left(90)
            turtle.fd(18)
            turtle.right(90)
            turtle.fd(40)
        elif i== '+':
            turtle.right(90)
            turtle.fd(18)
            turtle.left(90)            
            turtle.write('日',font=("Arial",18,"normal"))
            turtle.pencolor("brown")
            turtle.left(90)
            turtle.fd(18)
            turtle.right(90)
            turtle.fd(40)
        elif i== '<':
            turtle.right(90)
            turtle.fd(18)
            turtle.left(90)
            turtle.write('时',font=("Arial",18,"normal"))
            turtle.pencolor("purple")
            turtle.left(90)
            turtle.fd(18)
            turtle.right(90)
            turtle.fd(40)
        elif i== '>':
            turtle.right(90)
            turtle.fd(18)
            turtle.left(90)            
            turtle.write('分',font=("Arial",18,"normal"))
            turtle.left(90)
            turtle.fd(18)
            turtle.right(90)
            turtle.fd(40)
        elif i== '@':
            turtle.pencolor("gold")
            turtle.right(90)
            turtle.fd(18)
            turtle.left(90)            
            turtle.write('秒',font=("Arial",18,"normal"))
            turtle.left(90)
            turtle.fd(18)
            turtle.right(90)
        else:
            drawDigit(eval(i))
def main():
    turtle.setup(1400,350,200,200)
    turtle.speed("fastest")
    turtle.penup()
    turtle.fd(-600)
    turtle.pensize(5)
    drawDate(time.strftime('%Y-%m=%d+%H<%M>',time.localtime()))
    drawDate(time.strftime('%S@',time.localtime()))
    turtle.hideturtle()
    turtle.done()
main()

动态时间

在这里插入图片描述

import turtle as t
import time
def pen():
    t.up()
    t.fd(6)
    t.down()
def drawline(draw):     #绘制单段数码管
    pen()
    t.pendown() if draw else t.penup()  # draw 为真则执行 pendown ,否则执行 penup

    t. fd(40)
    pen()
    t.right(90)
def drawdigit(digit):       #根据数字绘制七段数码管
    drawline(True) if digit in [2,3,4,5,6,8,9] else drawline(False)
    drawline(True) if digit in [0,1,3,4,5,6,7,8,9] else drawline(False)
    drawline(True) if digit in [0,2,3,5,6,8,9] else drawline(False)
    drawline(True) if digit in [0,2,6,8] else drawline(False)
    t.left(90)
    drawline(True) if digit in [0,4,5,6,8,9] else drawline(False)
    drawline(True) if digit in [0,2,3,5,6,7,8,9] else drawline(False)
    drawline(True) if digit in [
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值