zoukankan      html  css  js  c++  java
  • 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())
            #加上文字:当前时间,注意换行符号:
    
            cur_time2 = time.strftime('当前时间:
    '+'%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
  • 相关阅读:
    动态设置ImageView的大小
    URI和URL、URN的区别
    关于Android中的异步任务
    Android下如何理解onMeasure,onLayout的过程
    Android如何获取同包名应用的图标及名称
    Android4.0 监听 android 手机情景模式(有声、静音、振动)
    Android中裁剪一张图片
    Json解析国家气象局天气API
    Android中AnimationDrawable的使用
    POJ
  • 原文地址:https://www.cnblogs.com/ysysbky/p/12253596.html
Copyright © 2011-2022 走看看