Python TKinter 天气时钟

用Python的tk做了一个可以用的小天气时钟软件

分享给大家啦

# pageFrame

from tkinter import *
import math, time
import threading as thd
from getWeather import *


class clockPage(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)

        # 预定义变量
        self.root = master  # 定义内部变量root
        self.root.geometry("400x500")
        self.canvas = Canvas(self, width=400, height=500)
        self.canvas.pack()
        self.List = []

        # 配置时钟边框
        # 生成外圆,圆内填充颜色是白色
        self.canvas.create_oval(50, 50, 350, 350, fill='white')
        # 画出刻度
        self.points()

        # 显示指针和时间
        self.createPage()

    def update(self):
        for j in self.List:
            self.canvas.delete(j)
        # print('update')
        self.createPage()
        handle = thd.Timer(0.5, self.update)
        handle.daemon = True
        handle.start()

    def createPage(self):
        tm = time.localtime()  # 获取当前时间
        t_hour = 0
        # 转换成12小时制
        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  # 秒针
        # 画指针
        self.createline(50, 6, rad1)  # 时针
        self.createline(90, 3, rad2)  # 分针
        self.createline(120, 1, rad3)  # 秒针
        # 显示数字时间
        cur_time = time.strftime('%Y-%m-%d\n\n %X', time.localtime())
        time_text = self.canvas.create_text(200, 420, text=cur_time, font=10, fill='purple')
        self.List.append(time_text)

    # 定义时针上的刻度1~12
    def points(self):
        # 绘制表盘数字
        for i in range(1, 13):
            # 表盘中心的位置是200,200,由此计算刻度的位置
            x = 200 + 120 * math.sin(2 * math.pi * i / 12)
            y = 200 - 120 * math.cos(2 * math.pi * i / 12)
            self.canvas.create_text(x, y, text=i, font=('黑体', 18), fill='Navy')  # 颜色是海军蓝
        # 绘制表盘刻度
        for i in range(1, 61):  # 定义时针刻度(1~12h)
            if i % 5 == 0:  # 5的倍数要长一些
                r = 150
            else:
                r = 145
            x = 200 + 140 * math.sin(2 * math.pi * i / 60)
            y = 200 - 140 * math.cos(2 * math.pi * i / 60)
            x2 = 200 + r * math.sin(2 * math.pi * i / 60)
            y2 = 200 - r * math.cos(2 * math.pi * i / 60)
            self.canvas.create_line(x, y, x2, y2)

    def createline(self, radius, line_width, rad):
        x = 200 + radius * math.sin(rad)
        y = 200 - radius * math.cos(rad)
        i = self.canvas.create_line(200, 200, x, y, width=line_width, fill='black')
        self.List.append(i)


class weatherPage(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.root = master  # 定义内部变量root
        self.root.geometry("400x500")
        self.createPage()

    def createPage(self):
        Label(self, text='天气页面,还没有设计怎么做UI').pack()
        obj = getWeather()
        if obj['error_code']:
            Label(self, text=obj['reason']).pack()
        else:
            for keys in obj['result']['realtime']:
                Label(self, text="%s : %s" % (keys, obj['result']['realtime'][keys])).pack()
import requests
import json

# 获取天气参数
# 使用API接口即数据接口,输入请求,返回天气情况
url = "http://apis.juhe.cn/simpleWeather/query" # 路径
#设置参数
params = {
     "city": "长沙",
     "key": "fb44de1e6bee842dd3bf0d60073a8178"
}

def getWeather():
    try:
        response = requests.get(url,params=params).json()
        # 字典的嵌套取值
        obj = response
        print(response)
    except:
        obj = {
            'error_code': 1,
            'reason':'无法连接到网络!请检查网络连接。'
        }
    return obj

# 用于测试结果
print(getWeather())
# mainPage

from pageFrames import *
import matplotlib

class MainPage(object):
    def __init__(self, master=None):
        self.root = master  # 定义内部变量root
        self.root.geometry('%dx%d' % (600, 400))  # 设置窗口大小
        self.createPage()

    def createPage(self):
        self.clockPage = clockPage(self.root)  # 创建不同Frame
        self.weatherPage = weatherPage(self.root)
        self.clockPage.pack()  # 默认显示数据录入界面
        menubar = Menu(self.root)
        menubar.add_command(label='时钟', command=self.clockShow)
        menubar.add_command(label='天气', command=self.weatherShow)
        self.root['menu'] = menubar  # 设置菜单栏

    def clockShow(self):
        self.clockPage.pack()
        self.weatherPage.pack_forget()

    def weatherShow(self):
        self.clockPage.pack_forget()
        self.weatherPage.pack()
from mainPage import *
import tkinter as tk


# 主函数
def main():
    root = tk.Tk()
    page = MainPage(root)

    # 开启时钟刷新
    page.clockPage.update()

    #开启界面
    root.mainloop()


if __name__ == '__main__':
    main()


 

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值