<code>import turtle # 導入繪圖海龜模塊
import datetime # 導入日期時間模塊
# 移動一段距離
def skip(distance): # 移動方法,不留移動痕跡
turtle.penup() # 抬筆不繪製
turtle.forward(distance) # 移動指定距離
turtle.pendown() # 落筆移動繪製
def draw_clock_dial(): # 繪製錶盤的方法
turtle.reset() # 刪除圖形歸位
turtle.hideturtle() # 隱藏箭頭
for i in range(60): # 循環執行60次,一圈為360度所以每一秒的角度為6度
skip(160) # 移動160,相當於錶盤圓的半徑
# 每5秒繪製一個小時刻度
if i % 5 == 0:
turtle.pensize(7) # 刻度大小
# 畫時鐘
turtle.forward(20) # 小時刻度的長度為20
skip(-20) # 復原小時刻度的位置
else:
turtle.pensize(1) # 將畫筆大小設置為1
turtle.dot() # 繪製分鐘刻度的小圓點
skip(-160) # 回到中心位置
turtle.right(6) # 向右旋轉6度
def get_week(t): # 獲取星期的方法
week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
return week[t.weekday()] # 返回當天的星期
def create_pointer(length, name): # 創建指針方法
turtle.reset() # 刪除圖形歸位
skip(-length * 0.1) # 抬筆移動指定距離
turtle.begin_poly() # 記錄多邊形
turtle.forward(length * 1.1) # 繪製指定長度的指針
turtle.end_poly() # 停止記錄多邊形
# 註冊多邊形狀
turtle.register_shape(name, turtle.get_poly())
def init_pointer(): # 初始化指針
global secHand, minHand, hurHand, printer
turtle.mode("logo") # 重置Turtle指向上
create_pointer(135,"secHand") # 創建秒針圖形
create_pointer(110,"minHand") # 創建分針圖形
create_pointer(90,"hurHand") # 創建時針圖形
secHand = turtle.Turtle() # 創建秒針turtle對象
secHand.shape("secHand") # 創建指定秒針名稱的形狀
minHand = turtle.Turtle() # 創建分針turtle對象
minHand.shape("minHand") # 創建指定分針名稱的形狀
hurHand = turtle.Turtle() # 創建時針turtle對象
hurHand.shape("hurHand") # 創建指定時針名稱的形狀
for hand in secHand, minHand, hurHand: # 循環遍歷三個指針
hand.shapesize(1, 1, 5) # 設置形狀拉伸大小和輪廓線
hand.speed(0) # 設置速度為最快
printer = turtle.Turtle() # 創建繪製文字的Turtle對象
printer.hideturtle() # 隱藏箭頭
printer.penup() # 抬筆
def move_pointer(): # 移動指針的方法
# 不停的獲取時間
t = datetime.datetime.today()
second = t.second + t.microsecond * 0.000001 # 計算移動的秒
minute = t.minute + second/60 # 計算移動的分
hour = t.hour + minute/60 # 計算移動的小時
secHand.setheading(6*second) # 設置秒針的角度
minHand.setheading(6*minute) # 設置分針的角度
hurHand.setheading(30*hour) # 設置時針的角度
turtle.tracer(False) # 關閉繪畫效果
printer.forward(65) # 向上移動65
# 繪製星期
printer.write(get_week(t), align="center",font=("Courier", 14, "bold"))
printer.back(130) # 倒退130
# 繪製年月日
printer.write(t.strftime('%Y-%m-%d'), align="center",font=("Courier", 14, "bold"))
printer.home() # 歸位
turtle.tracer(True) # 開啟繪畫效果
turtle.ontimer(move_pointer, 10) # 10毫秒後調用move_pointer()方法
if __name__ == '__main__':
turtle.setup(450, 450) # 創建窗體大小
init_pointer() # 調用初始化指針的方法
turtle.tracer(False) # 關閉繪畫效果
draw_clock_dial() # 繪製錶盤
move_pointer() # 調用移動指針的方法
turtle.mainloop() # 不關閉窗體
/<code>
閱讀更多 滴滴滴程序員 的文章