python+tkinter制作一個可自定義的動態時鍾及詳細解釋,珍藏版


1.效果圖

2.完整代碼

#第1步:導出模塊
from tkinter import *
import math,time
#第2步:定義窗口的相關設置
root = Tk()
root.title("a DIY clock") #定義窗口名稱
root.geometry("1020x800+500+0") #位置坐標=500,0=就是頂格向右水平移動500
root.configure(bg='pink') #定義窗口的背景顏色
#第3步:定義全局變量
global List #定義全局變量,list列表
global i   #定義i
List = [] #定義了一個初始化空的list


#第4步:定義一個畫布canvas,大小、背景顏色
canvas = Canvas(root,width=400, height=500,bg='green')
canvas.pack() #居中頂上線pack的特點
#生成外圓,圓內填充顏色是fill設置
canvas.create_oval(50, 50, 350, 350,fill='orange') 
#生成外圓,可以引申復習一下:canvas的畫圖形學習,畫圓、長方形、正方形、橢圓形

#附加:如果在root的tk窗口上還有其他的東西,建議放在這里設置
#如果放在while循環后面,因為一旦進入while循環時,就不能停止,除非停止才進行下一步,才顯示。
#而顯示動態的時間是一個死循環,故建議放在while循環前進行設置
#設置字體最大20,與label的屬性有關
label=Label(root,text='新年快樂',width=10,height=1,font=20,fg='red')
label.pack() #label位置的方法一
#label.place(x=400,y=501) #canvas的height=500,還是pack好,窗口大小改變,依舊居中頂在畫畫布下

#第5步:定義時針上的刻度1~12h
def points():
    for i in range(1,13): #定義時針刻度(1~12h)
        x = 200 + 130*math.sin(2*math.pi*i/12)
        y = 200 - 130*math.cos(2*math.pi*i/12)
        #時針上的小時刻度的顯示,位置,字體大小,注意字體顏色是用fill,不是color或者fg或bg
        canvas.create_text(x,y,text=i,font=10,fill='red') 
points() #生成數字

#第6步:定義指針=時針、分針、秒針
def createline(radius,line_width,rad):
    x = 200 + radius * math.sin(rad)
    y = 200 - radius * math.cos(rad)
    #指針的設置,包括時針、分針、秒針,及顏色fill相當於指針的顏色設置
    i = canvas.create_line(200, 200, x, y, width=line_width,fill='blue')
    List.append(i) #列表末尾添加i

#第7步:
#注意時鍾是一直循環的,while循環等於1相當於true,一直循環的
#如果不加try和except TclError:pass,那么關閉tk窗口的右上角的’x‘,強制中斷,跳出循環,就會報錯
try:
#定義循環
    while True:
        tm=time.localtime() #獲取當前時間
        #cur_time2 = time.strftime('%Y-%m-%d %X', time.localtime())
        #加上文字:當前時間,注意換行符號:\n
        cur_time2 = time.strftime('當前時間:\n'+'%Y-%m-%d %X', time.localtime())
        t_hour=0
        if tm.tm_hour<=12:
            t_hour=tm.tm_hour
        else:
            t_hour=tm.tm_hour-12
        #定義指針大小
        rad1=2*math.pi*(t_hour+tm.tm_min/60)/12 #時針
        rad2=2*math.pi*(tm.tm_min+tm.tm_sec/60)/60 #分針
        rad3=2*math.pi*tm.tm_sec/60 #秒針
        #畫指針
        createline(50,6,rad1) #時針
        createline(90,3,rad2) #分針
        createline(120,1,rad3) #秒針

        
        #當前時間顯示地址、文字顯示、字體大小、fill相當於字體顏色設置
        time_text=canvas.create_text(200,450,text=cur_time2,font=10,fill='purple')
        root.update() #窗口刷新或更新,因當前時間是一秒一秒跳動的,否則不動了
        time.sleep(1) #暫停1秒,代表秒針是1秒1秒的走動這個循環
        #循環走動一次,及時刪除畫布上的相關數據,否則有殘影
        for j in List:
        #備注這里的i與上面的i不同,是局部變量,也可以設置item或者j
            canvas.delete(j)
        canvas.delete(time_text)
except TclError: #如果出現錯誤,就是強制跳出死循環,那么pass=忽略跳出
    pass

#循環走起
root.mainloop()
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM