m0_70910030 2022-12-28 14:18 采纳率: 93.7%
浏览 43
已结题

python绘图代码的解读对以下python绘制钟表没有解读的代码逐行进行解读,如何解决?

python绘图代码的解读
对以下python绘制钟表没有解读的代码逐行进行解读


```python
import turtle as tt
from datetime import *
 
# 抬起画笔,跳到一个地方
def Skip(step):
    tt.penup()#抬起画笔
    tt.forward(step)#画笔前进一段距离
    tt.pendown()#画笔落下
#创建表针函数 
def Zheng(name, length):
    
    tt.reset()# 注册Turtle形状,建立表针Turtle
    Skip(-length * 0.1)#表针一端,过表盘中心一小段,开始绘制
    tt.begin_poly()# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
    tt.forward(length * 1.1)# 设置表针长度,绘制表针
    tt.end_poly() # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连
    
    handForm = tt.get_poly()# 返回最后记录的多边形。
    tt.register_shape(name, handForm)
 
def Init():
    global miao, fen, shi, printer
    
    tt.mode("logo")# logo:向上(北) 顺时针
    # 建立三个表针Turtle并初始化
    Zheng("miao", 135)#设置秒针的长度为135
    Zheng("fen", 120)#分针的长度为120
    Zheng("shi", 80)#时针的长度为80
    miao = tt.Turtle()
    miao.shape("miao")
    fen = tt.Turtle()
    fen.shape("fen")
    shi = tt.Turtle()
    shi.shape("shi")
   
    for hand in miao, fen, shi:
        hand.shapesize(1, 1, 3)
        hand.speed(0)
   
    # 建立输出文字Turtle
    printer = tt.Turtle()
    # 隐藏画笔
    printer.hideturtle()
    printer.penup()
    
def SetupClock(r):
    # 建立表的外框
    tt.reset()
    tt.pensize(7)#画笔宽度
    for i in range(60):#循环60Skip(r)
        if i % 5 == 0:
            tt.forward(20)
            Skip(-r - 20)
           
            Skip(r + 20)
            if i == 0:
                tt.write(int(12), align="center", font=("Courier", 15, "bold"))
            elif i == 30:
                Skip(25)
                tt.write(int(i/5), align="center", font=("Courier", 15, "bold"))
                Skip(-25)
            elif (i == 25 or i == 35):
                Skip(20)
                tt.write(int(i/5), align="center", font=("Courier", 15, "bold"))
                Skip(-20)
            else:
                tt.write(int(i/5), align="center", font=("Courier", 15, "bold"))
            Skip(-r - 20)
        else:
            tt.dot(5)
            Skip(-r)
        tt.right(6)
#创建星期函数        
def Week(t):   
    week = ["Monday", "Tuesday", "Wed","Thurs", "Fri", "Sat", "Sun"]#创建星期列表
    return week[t.weekday()]# t.weekday() 周一为0,周二为1...可作为列表的index
#创建日期函数 
def Date(t):
    y = t.year#获得年
    m = t.month#获得月
    d = t.day#获得日
    return "{} 年 {} 月 {} 日".format(y, m, d)#格式化字符串:-年-月-日
#显示时间函数
def time(t):
    m = t.minute#获得分
    h = t.hour#获得时
    return "{}:{}".format(h, m)#格式化字符串
def Tick():
    # 绘制表针的动态显示
    t = datetime.today()
    second = t.second + t.microsecond * 0.000001
    minute = t.minute + second / 60.0
    hour = t.hour + minute / 60.0
    miao.setheading(6 * second)
    fen.setheading(6 * minute)
    shi.setheading(30 * hour)
    
    tt.tracer(False) 
    printer.forward(65)
    printer.write(Week(t), align="center",
                  font=("Courier", 15, "bold"))
    printer.back(130)
    printer.write(Date(t), align="center",
                  font=("Courier", 15, "bold"))
    printer.home()
    tt.tracer(True)
 
    # 100ms后继续调用tick
    tt.ontimer(Tick, 100)
 
def main():
    # 打开/关闭龟动画,并为更新图纸设置延迟。
    tt.tracer(False)
    Init()
    SetupClock(160)
    tt.tracer(True)
    Tick()
    tt.mainloop()#显示时钟
#主窗口运行
if __name__ == "__main__":
    main()

```

  • 写回答

1条回答 默认 最新

  • |__WhoAmI__| 2022-12-28 14:42
    关注

    首先,导入了turtle和datetime两个库。turtle是python自带的绘图库,datetime是python自带的日期和时间处理库。

    接下来是定义函数Skip(step),这个函数的作用是抬起画笔,然后向前移动step的距离。

    接下来是定义函数Zheng(name, length),这个函数的作用是创建一个名为name的表针,长度为length。首先使用tt.reset()重置turtle,然后使用Skip()函数跳到一个地方(过表盘中心一小段),然后使用tt.begin_poly()开始记录多边形的顶点,tt.forward(length * 1.1)绘制表针,tt.end_poly()停止记录多边形的顶点,然后使用tt.get_poly()返回最后记录的多边形,并使用tt.register_shape()注册该多边形。

    接下来是定义函数Init(),这个函数的作用是初始化绘制时钟所需的turtle。首先使用tt.mode()设置turtle的模式,然后使用Zheng()函数创建三个表针turtle,分别是秒针、分针和时针。接着使用for循环遍历每个表针turtle,并设置它们的形状大小和速度。最后创建输出文字turtle,并隐藏画笔。

    接下来是定义函数SetupClock(r),这个函数的作用是绘制时钟表盘。首先使用tt.reset()重置turtle,然后使用tt.pensize()设置画笔的宽度。接着使用for循环遍历每个刻度,使用Skip()函数跳到绘制刻度的位置,使用tt.forward()绘制刻度,然后再使用Skip()函数跳回到起点。如果是整点刻度,则再使用tt.write()函数输出整点数字。

    最后是主函数,使用Init()函数初始化,然后使用SetupClock()函数绘制表盘。接着使用while True:循环不断更新时钟,获取当前的时、分、秒,然后计算出每个表针的角度,使用turtle的setheading()函数设置表针的角度,最后使用time.sleep()函数设置延迟1秒。
    望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月6日
  • 已采纳回答 12月29日
  • 创建了问题 12月28日

悬赏问题

  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀
  • ¥15 mifare plus卡认证
  • ¥30 LSTM预测结果是一条直线
  • ¥15 stnodeeditor自定义控件
  • ¥15 SDO如何更改STM32的波特率