Tkinter气温小组件

这个博客展示了一个使用Tkinter库构建的简单GUI应用,该应用能够从网络获取IP地址的归属地信息,并在界面上显示。同时,虽然原始代码中没有实现,但提到了需要添加从数据库获取气温数据的功能,并将其显示在Entry组件中。此外,应用还包括了一个刷新机制,每隔一定时间自动更新IP信息。
摘要由CSDN通过智能技术生成

从数据库中拉取气温显示的小组件
只有可视化部分

from tkinter import *
from urllib.request import urlopen
import requests


def get_ip_info():
    '''
    获取ip并解析归属地
    :return:字符串,国家和城市
    '''
    my_ip = urlopen('http://ip.42.pl/raw').read()
    r=requests.get("https://ip.taobao.com/outGetIpInfo?ip=%s"%str(my_ip)[2:-1])
    if r.json()["code"]==0:
        i=r.json()["data"]
        return "%s,%s"%(i["country"],i["city"])

def refreshText():
    '''
    主要就是修改添加这里的代码
    在这里实现连接数据库取值,将取出的值set到文本框中
    由于本方法不断递归执行,所以请不要在方法中创建连接后不关闭
    要么关闭方法内创建的连接,要么在方法外创建连接
    :return:
    '''


    # 可以通过set方法来设置Entry中显示的内容
    tcity.set(get_ip_info())
    tMax.set(10)
    tMin.set("min")

    '''
    提示框,通过不同的if,作出不同的提示内容
    如果没有一个符合,就把提示隐藏
    '''
    if int(tMax.get()) < 10:
        tishi.grid(row=2, columnspan=6)
        tishiVal.set("天气。。。。。")
    else:
        tishi.grid_forget()

    #第一个参数是递归间隔时间,单位是毫秒
    tk.after(1000, refreshText)


'''
以下代码应该不需要改动了
以下代码应该不需要改动了
以下代码应该不需要改动了
'''
if __name__ == '__main__':
    tk = Tk()
    tk.title("金正天气")

    # 创建StringVar替代insert作为Entry值,方便更新文本值
    tcity = StringVar()
    tMax = StringVar()
    tMin = StringVar()
    tishiVal = StringVar()

    # 设定显示标签
    lcity = Label(tk, text="✠")
    lmax = Label(tk, text="☀")
    sheshi1 = Label(tk, text="℃")
    lmin = Label(tk, text="❄")
    sheshi2 = Label(tk, text="℃")

    '''
    设定Entry文本框
    tk:指定的窗口
    width:宽度
    bd:边框宽度
    state:状态(NORMAL:普通,DISABLED:只读)
    textvariable:文本框内容
    '''
    city = Entry(tk, bd=0, state=DISABLED, textvariable=tcity)
    temMax = Entry(tk, width=3, bd=0, state=DISABLED, textvariable=tMax)
    TemMin = Entry(tk, width=3, bd=0, state=DISABLED, textvariable=tMin)
    tishi = Entry(tk, bd=0, state=DISABLED, textvariable=tishiVal)

    '''
    设定组件的布局
    row:行数
    column:列数
    sticky:组件偏向位置(W左,E右,N上,S下)
    columnspan:组件跨越的列数
    '''
    lcity.grid(row=0, column=0)
    lmax.grid(row=1, column=0, sticky=E)
    sheshi1.grid(row=1, column=2, sticky=W)
    lmin.grid(row=1, column=3, sticky=E)
    sheshi2.grid(row=1, column=5, sticky=W)
    city.grid(row=0, column=1, sticky=W, columnspan=5)
    temMax.grid(row=1, column=1, sticky=E)
    TemMin.grid(row=1, column=4, sticky=E)

    #在主事件循环前调用,实现更新组件内容
    tk.after(0,refreshText())
    '''
    主事件循环,原理没看懂,好像可以保证组件实时更新
    要把所有更新的组件全部写在此函数之前
    '''
    mainloop()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值