python寫的動(dòng)態(tài)時(shí)鐘的代碼
import datetime?????????????? # 導(dǎo)入日期時(shí)間模塊
# 移動(dòng)一段距離
def skip(distance):????????? # 移動(dòng)方法,不留移動(dòng)痕跡
??? turtle.penup()?????????? # 抬筆不繪制
??? turtle.forward(distance) # 移動(dòng)指定距離
??? turtle.pendown()???????? # 落筆移動(dòng)繪制
def draw_clock_dial():????? # 繪制表盤的方法
??? turtle.reset()?????????? # 刪除圖形歸位
??? turtle.hideturtle()?????? # 隱藏箭頭
??? for i in range(60):?????? # 循環(huán)執(zhí)行60次,一圈為360度所以每一秒的角度為6度
??????? skip(160)????????????? # 移動(dòng)160,相當(dāng)于表盤圓的半徑
??????? # 每5秒繪制一個(gè)小時(shí)刻度
??????? if i % 5 == 0:
??????????? turtle.pensize(7)?????? # 刻度大小
??????????? # 畫時(shí)鐘
??????????? turtle.forward(20)?????? # 小時(shí)刻度的長度為20
??????????? skip(-20)????? # 復(fù)原小時(shí)刻度的位置
??????? else:
??????????? turtle.pensize(1)????? # 將畫筆大小設(shè)置為1
??????????? turtle.dot()?????????? # 繪制分鐘刻度的小圓點(diǎn)
??????? skip(-160)???????????????? # 回到中心位置
??????? turtle.right(6)??????????? # 向右旋轉(zhuǎn)6度
def get_week(t):?????????????????? # 獲取星期的方法
??? week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
??? return week[t.weekday()]?????? # 返回當(dāng)天的星期
def create_pointer(length, name):???? # 創(chuàng)建指針方法
??? turtle.reset()???????????????? # 刪除圖形歸位
??? skip(-length * 0.1)??????????? # 抬筆移動(dòng)指定距離
??? turtle.begin_poly()??????????? # 記錄多邊形
??? turtle.forward(length * 1.1)?? # 繪制指定長度的指針
??? turtle.end_poly()????????????? # 停止記錄多邊形
??? # 注冊(cè)多邊形狀
??? turtle.register_shape(name, turtle.get_poly())
def init_pointer():??????????????? # 初始化指針
??? global secHand, minHand, hurHand, printer
??? turtle.mode("logo")????????????? # 重置Turtle指向上
??? create_pointer(135,"secHand")?????? # 創(chuàng)建秒針圖形
??? create_pointer(110,"minHand")?????? # 創(chuàng)建分針圖形
??? create_pointer(90,"hurHand")??????? # 創(chuàng)建時(shí)針圖形
??? secHand = turtle.Turtle()??????? # 創(chuàng)建秒針turtle對(duì)象
??? secHand.shape("secHand")???????? # 創(chuàng)建指定秒針名稱的形狀
??? minHand = turtle.Turtle()??????? # 創(chuàng)建分針turtle對(duì)象
??? minHand.shape("minHand")???????? # 創(chuàng)建指定分針名稱的形狀
??? hurHand = turtle.Turtle()??????? # 創(chuàng)建時(shí)針turtle對(duì)象
??? hurHand.shape("hurHand")???????? # 創(chuàng)建指定時(shí)針名稱的形狀
??? for hand in secHand, minHand, hurHand:?? # 循環(huán)遍歷三個(gè)指針
??????? hand.shapesize(1, 1, 5)????????????? # 設(shè)置形狀拉伸大小和輪廓線
??????? hand.speed(0)??????????????????????? # 設(shè)置速度為最快
??? printer = turtle.Turtle()??????????????? # 創(chuàng)建繪制文字的Turtle對(duì)象
??? printer.hideturtle()???????????????????? # 隱藏箭頭
??? printer.penup()????????????????????????? # 抬筆
def move_pointer():????????????????????????? # 移動(dòng)指針的方法
??? # 不停的獲取時(shí)間
??? t = datetime.datetime.today()
??? second = t.second + t.microsecond * 0.000001??? # 計(jì)算移動(dòng)的秒
??? minute = t.minute + second/60?????????????????? # 計(jì)算移動(dòng)的分
??? hour = t.hour + minute/60?????????????????????? # 計(jì)算移動(dòng)的小時(shí)
??? secHand.setheading(6*second)???????????????????? # 設(shè)置秒針的角度
??? minHand.setheading(6*minute)???????????????????? # 設(shè)置分針的角度
??? hurHand.setheading(30*hour)????????????????????? # 設(shè)置時(shí)針的角度
??? turtle.tracer(False)???????????????????????????? # 關(guān)閉繪畫效果
??? printer.forward(65)????????????????????????????? # 向上移動(dòng)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毫秒后調(diào)用move_pointer()方法
if __name__ == '__main__':
??? turtle.setup(450, 450)????? # 創(chuàng)建窗體大小
??? init_pointer()????????????? # 調(diào)用初始化指針的方法
??? turtle.tracer(False)??????? # 關(guān)閉繪畫效果
??? draw_clock_dial()??????????? # 繪制表盤
??? move_pointer()?????????????? # 調(diào)用移動(dòng)指針的方法
??? turtle.mainloop()??????????? # 不關(guān)閉窗體
標(biāo)簽: