从数据库中拉取气温显示的小组件
只有可视化部分
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()