溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python實(shí)現(xiàn)時(shí)鐘顯示效果思路詳解

發(fā)布時(shí)間:2020-09-14 15:56:57 來源:腳本之家 閱讀:226 作者:我要鹿鹿鹿 欄目:開發(fā)技術(shù)

語言:Python

IDE:Python.IDE

1.編寫時(shí)鐘程序,要求根據(jù)時(shí)間動(dòng)態(tài)更新

Python實(shí)現(xiàn)時(shí)鐘顯示效果思路詳解

2.代碼思路

需求:5個(gè)Turtle對(duì)象, 1個(gè)繪制外表盤+3個(gè)模擬表上針+1個(gè)輸出文字
Step1:建立Turtle對(duì)象并初始化
Step2:靜態(tài)表盤繪制
Step3:根據(jù)時(shí)鐘更新表針位置與時(shí)間信息

基本庫:Turtle、datetime

3.代碼段

from turtle import *
from datetime import *
def Skip(step):
  penup()
  forward(step)
  pendown()
def mkHand(name, length):
  #注冊(cè)Turtle形狀,建立表針Turtle
  reset()
  Skip(-length*0.1)
  begin_poly()
  forward(length*1.1)
  end_poly()
  handForm = get_poly()
  #注冊(cè)Turtle形狀命令register_shape(name,shape=None)
  register_shape(name, handForm)
def Init():
  global secHand, minHand, hurHand, printer
  mode("logo")# 重置Turtle指向北
  #建立三個(gè)表針Turtle并初始化
  #第二個(gè)參數(shù)為長度
  mkHand("secHand", 125)
  mkHand("minHand", 130)
  mkHand("hurHand", 90)
  secHand = Turtle()
  secHand.shape("secHand")
  minHand = Turtle()
  minHand.shape("minHand")
  hurHand = Turtle()
  hurHand.shape("hurHand")
  for hand in secHand, minHand, hurHand:
    hand.shapesize(1, 1, 3)
    hand.speed(0)
  #建立輸出文字Turtle
  printer = Turtle()
  printer.hideturtle()
  printer.penup()
def SetupClock(radius):
  #建立表的外框
  reset()
  pensize(7)
  for i in range(60):
    Skip(radius)
    if i % 5 == 0:
      forward(20)
      Skip(-radius-20)
    else:
      dot(5)
      Skip(-radius)
    right(6)
def Week(t):  
  week = ["星期一", "星期二", "星期三",
      "星期四", "星期五", "星期六", "星期日"]
  return week[t.weekday()]
def Date(t):
  y = t.year
  m = t.month
  d = t.day
  return "%s %d %d" % (y, m, d)
def Tick():
  #繪制表針的動(dòng)態(tài)顯示
  #當(dāng)前時(shí)間
  t = datetime.today()
  second = t.second + t.microsecond*0.000001
  minute = t.minute + second/60.0
  hour = t.hour + minute/60.0
  secHand.setheading(6*second)
  minHand.setheading(6*minute)
  hurHand.setheading(30*hour)
   #介入Tracer函數(shù)以控制刷新速度
  tracer(False) 
  printer.forward(65)
  printer.write(Week(t), align="center",
         font=("Courier", 14, "bold"))
  printer.back(130)
  printer.write(Date(t), align="center",
         font=("Courier", 14, "bold"))
  printer.home()
  tracer(True)
  ontimer(Tick, 100)#100ms后繼續(xù)調(diào)用tick
def main():
  tracer(False)
  Init()
  SetupClock(160)
  tracer(True)
  Tick()
  mainloop()
if __name__ == "__main__":    
  main()

補(bǔ)充:

Python實(shí)現(xiàn)時(shí)鐘

1.小時(shí)鐘獲取當(dāng)前時(shí)間并用打印在Console上

2.上代碼

 import time,sys,os
 while(1):
   t = time.strftime('%H:%M:%S',time.localtime(time.time()))
   sys.stdout.write(t+'\b'*10)
   sys.stdout.flush()
   time.sleep(0.1)
   os.system('cls')

3.解釋

第一步:導(dǎo)入time,sys,os模塊

第二部:實(shí)現(xiàn)無限循環(huán)

第三步:實(shí)現(xiàn)格式化輸出,具體的詳細(xì)使用方法,參見:這里

第四部:重定向到Console上

第五步:刷新

第六步:間隔0.1執(zhí)行一次

第七步:清屏

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI