日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python-使用海龟绘图制作动态时钟

發布時間:2024/3/12 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python-使用海龟绘图制作动态时钟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在實現動態時鐘時,需要使用python內置的datetime模塊與turtle模塊。
1.datetime模塊

import datetime

(1)datetime模塊中datetime類的today()方法,用于返回一個表示當前本地日期時間的datetime對象。

datetime.today()

參數說明:

  • 返回值:返回一個表示當前本地日期時間的datetime對象。

實現獲取當前本地日期與時間的示例代碼如下:

from datetime import datetime # 導入datetime模塊中的datetime類 dt=datetime.today() #把獲取的當前本地日期時間賦給變量dt print(dt) # 打印當前本地日期時間

輸出結果為:

2019-10-11 09:18:35.784341

(2)如果已經獲取了當前本地日期時間的datetime對象,此時可以通過該對象的變量名稱獲取對應的年、月、日、時、分、秒及微秒。

from datetime import datetime # 導入datetime模塊中的datetime類 dt=datetime.today() #把獲取的當前本地日期時間賦給變量dt print(dt) # 打印當前本地日期時間 print(dt.year,'年') print(dt.month,'月') print(dt.day,'日') print(dt.hour,'時') print(dt.minute,'分') print(dt.second,'秒') print(dt.microsecond,'微秒')

輸出結果為:

2019-10-11 09:25:35.665185 2019101192535665185 微秒

(3)datetime對象中提供了weekday()方法,用于返回指定日期在一周內的序號,即星期幾,其中周一表示為0,周日表示為6。:

datetime.weekday()

參數說明:

  • 返回值:返回指定日期在一周內的序號,即星期幾,其中周一表示為0,周日表示為6。

實現獲取當前本地日期對應星期的示例代碼如下:

from datetime import datetime # 導入datetime模塊中的datetime類 week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'] dt=datetime.today() #把獲取的當前本地日期時間賦給變量dt print('當前日期時間為:',dt) print(week[dt.weekday()])

輸出結果為:

當前日期時間為: 2019-10-11 09:46:34.851536 星期五

2.turtle模塊
turtle模塊是python的內置模塊,所以在使用前需要使用import導入該模塊。

import turtle

(1)創建游戲窗體可以使用turtle模塊中的setup()方法來實現。

turtle.setup(width=_CFG["width"],height=_CFG["height"],startx=_CFG["leftright"],starty=_CFG["topbottom"])

參數說明如下:

  • width:表示窗體的寬度,如果是整數,大小以像素為單位,如果是浮動,則為屏幕的一小部分;默認值為屏幕的50%。
  • height:表示窗體的高度,如果是整數,高度以像素為單位,如果是浮動,則為屏幕的一小部分;默認值為屏幕的75%。
  • startx:表示窗體顯示在屏幕的橫向位置,如果為正,則以像素為單位從屏幕左邊緣開始,如果為負,則從右邊緣開始,如果沒有,則水平居中窗口。
  • starty:表示窗體顯示在屏幕的縱向位置,如果為正,則以像素為單位從屏幕上邊緣開始,如果為負,則從下邊緣開始,如果沒有,則垂直居中窗口。

創建游戲窗體的關鍵代碼如下:

import turtle # 導入繪圖海龜模塊 turtle.setup(450,450) # 創建窗體大小 turtle.mainloop() # 不關閉窗體

(2)turtle模塊中的forward()方法,用于實現畫筆按照指定方向,移動指定的距離。

turtle.forward(distance)

參數說明如下:

distance:表示需要指定的移動距離(整數或浮點數)。說明:turtle模塊中的fd()方法與forward()方法相同。

實現移動繪制的示例代碼如下:

import turtle # 導入繪圖海龜模塊 turtle.forward(50) # 默認方向移動50,并繪制直線 turtle.mainloop() # 不關閉窗體說明:如果僅需要讓畫筆移動并不進行繪制時,可以在forward()方法前添加抬筆方法penup()、pu()或up()

(3)turtle模塊中的forward()方法,用于實現繪制指定直徑的點,可設置點的顏色。

turtle.dot(size=None,*color)

參數說明如下:

  • size:表示設置圓點直徑的大小。
  • color:表示設置圓點的顏色,該值為字符串類型。

實現繪制圓點的示例代碼如下:

import turtle # 導入繪圖海龜模塊 def skip(distance): # 移動方法,不留移動痕跡turtle.penup() # 抬筆不繪制turtle.forward(distance) # 移動指定距離turtle.pendown() # 落筆移動繪制 if __name__ == '__main__':turtle.hideturtle() # 隱藏箭頭turtle.dot() # 默認值圓點skip(20) # 向前移動20turtle.dot(10) # 指定大小的圓點skip(20) # 向前移動20turtle.dot(15,'red') # 紅色圓點turtle.mainloop() # 不關閉窗體

(4)turtle模塊中的right()方法,用于實現向右旋轉畫筆的角度。

turtle.right(angle)

參數說明如下:

  • angle:表示設置需要旋轉的角度。

實現旋轉繪制的示例代碼如下:

import turtle # 導入繪圖海龜模塊 def skip(distance): # 移動方法,不留移動痕跡turtle.penup() # 抬筆不繪制turtle.forward(distance) # 移動指定距離turtle.pendown() # 落筆移動繪制 if __name__ == '__main__':turtle.hideturtle() # 隱藏箭頭for i in range(60):skip(160) # 移動160turtle.dot(15,'red') # 紅色圓點skip(-160)turtle.right(6)

(5)turtle模塊中的register_shape()方法,用于注冊圖形。

turtle.register_shape(name,shape=None)

參數說明如下:

  • name:表示注冊圖形的字符串名稱。
  • shape:表示數據結構的建模形狀,可以是多邊形的坐標元組、圖片以及復合形狀。

實現注冊圖形的示例代碼如下:

import turtle # 導入繪圖海龜模塊 turtle.begin_poly() # 開始記錄行走位置 for i in range(2):turtle.forward(100) # 向前移動100turtle.left(90) # 向左旋轉90度turtle.forward(20) # 向前移動20turtle.left(90) # 向左旋轉90度turtle.end_poly() # 結束記錄行走位置turtle.register_shape("rectangle", turtle.get_poly())turtle.mainloop() # 不關閉窗體

(6)turtle模塊中的shape()方法,用于將畫筆設置為指定圖形。

turtle.shape(name=None)

參數說明如下:

name:表示需要設置圖形的字符串名稱。

實現將畫筆設置為烏龜的示例代碼如下:

import turtle # 導入繪圖海龜模塊 turtle.shape('turtle') # 將畫筆設置為烏龜 turtle.mainloop() # 不關閉窗體

實例

''' 動態時鐘 ''' 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# if i == 0: # 判斷第一個位置為12點# # 寫入數字12# turtle.write(12, align='center', font=('Courier', 14, 'bold'))# elif i == 25 or i == 30 or i == 35: # 5、6、7# skip(25) # 避免與刻度重疊,所以多移動一段距離# # 根據i除以5獲取,5點、6點、7點并寫入對應的數字# turtle.write(int(i/5), align='center', font=('Courier', 14, 'bold'))# skip(-25) # 回到原位置# else:# # 根據i除以5獲取其它時間的數字并寫入# turtle.write(int(i/5), align='center', font=('Courier', 14, 'bold'))skip(-20) # 復原小時刻度的位置else:turtle.pensize(1) # 將畫筆大小設置為1turtle.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, printerturtle.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() # 不關閉窗體

總結

以上是生活随笔為你收集整理的Python-使用海龟绘图制作动态时钟的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。