简单图形界面初学 :tkinter+阿里云接口+爬虫,实现全国天气查询_tkinter显示爬虫七天天气折线图-程序员宅基地

技术标签: 网络爬虫  简单图形界面tkinter天气预报  界面 PyQt Tkinter  Python  

 

可能需要的环境:

 Python 3.6官网下载     

需要下载的第三方库:requests       其余为python自带不需要下载

 

首先看下效果图

具体写作过程参考b站视频传送门GUI天气预报

接下来实现过程,首先创建窗口,设置标题,布局窗口,设置标签,按钮,就直接粘贴代码:

如果对创建窗口的函数不熟悉:请点击python中tkinter的使用(控件整理)(一)python中tkinter的使用(相应事件整理)(二)

        
#创建窗口
window=Tk()
#设置标题
window.title("天气查询(可查县市省)")
#设置窗口大小,并布局接近中间的位置
window.geometry("900x640+540+300")
#设置标签
label=Label(window,text="请输入要查询城市的名字:",font=("微软雅黑",20),fg='blue')
#定位 grid网格布局
label.grid()
#添加输入框 并布局
entry=Entry(window,font=('微软雅黑',20),width=30,fg='blue')
entry.grid(row=0,column=1)
#列表控件
lis=Listbox(window,font=("微软雅黑",12),width=90,height=25)
lis.grid(row=1,columnspan=3)
#showbg()
#设置按钮
button=Button(window,text="查询",width=10,height=1,command=getWeather)
#设置按下按钮的背景颜色
button['activebackground']='green'
#设置按下按钮的字体颜色
button['activeforeground']='red'
#
button['cursor']='heart'
#定位 左对齐 sticky:对齐方式 N S W E
button.grid(row=2,column=0,sticky=W)
#command 点击触摸事件
Button(window,text="退出",width=10,height=1,command=window.quit).grid(row=2,column=1,sticky=E)
#显示窗口,消息循环
window.mainloop()

如果上面有什么不懂的,可以留言提问,或者自行百度。重点是按钮触发事件。尽可能的详细讲解

首先我们需要数据来源,来源是阿里云上面的免费天气查询的接口,要去申请接口。

传送门请点击:全国天气预报查询(免费版)

然后登录点击购买,支付0元,完成购买后,就可以按照上面的b站地址,进行操作了。

里面有python2的请求实例,我们需要按照上面视频的也要重新构造请求。由于视频请求的东西有限,我就自己改,把能拿的数据都拿了,多了一些东西,就说和视频里面不一样的吧。

我多爬了空气质量,风向,温度指数,运动指数,洗车指数,紫外线指数,穿衣指数.....就是这些指数看下面图

你会发现这是字典列表里面字典嵌套字典,所以得把列表里面的每个字典的字典里面Key对应的值,拿出来,所以for循环走一波,里面的值存列表,每三个值,就开始放进listbox里面。再用格式控制走一波。

提取嵌套字典:首先最外层字典中各种指数提取出来,infoa=info['index'],因为所有指数都放在idnex 为key对应的值里面在

 infoa=info['index']
for item in infoa:
            #提取字典里面的值
            for v in item.items():
                value.append(v[1])

每次提取出来index里面的一个字典,提取里面三个值就放进listbox里面,index每次多加1个是每个指数行之间插入一行空字符,方便查看,因为文字,太多了。

  index+=1
            lis.insert(index,"{}:  {}".format(value[0],value[1]))
            index+=1
            lis.insert(index,"%s"%value[2])
            index+=1
            lis.insert(index," ")
            value.clear()

里面的appcode就是你申请阿里云天气预报成功后你得到的code。我的就不贴出来了。下面全代码:供参考

#桌面
from tkinter import*
from tkinter import messagebox
from PIL import Image,ImageTk
import requests,urllib
def getWeather():
    #获取用户输入的城市
    city=entry.get()
    if city=='':
        messagebox.showinfo("提示","请输入要查询的城市(县市省)")
    else:
        #重构接口
        #编码
        city=urllib.request.quote(city)
        host = 'https://jisutqybmf.market.alicloudapi.com'
        path = '/weather/query'
        method = 'GET'
        #appcoe 申请阿里云的免费天气预报接口  
        #网址:https://market.aliyun.com/products/57126001/cmapi014302.html?spm=5176.2020520132.101.5.kHQHGQ#sku=yuncode830200000
        appcode = '你申请阿里云天气成功后的code'
        querys ='city='+city
        url = host + path +'?'+querys
        header={'Authorization':'APPCODE ' + appcode}
        #把字符格式数据转换成字典格式
        r=requests.get(url,headers=header).json()
        info=r["result"]
        infoa=info['index'] 
        infob=info['aqi']
        infobb=infob['aqiinfo']
        #向列表控件添加元素
        lis.delete(0,END)
        lis.insert(0,"当前城市:{}      最新更新时间:  {}   {} ".format(info["city"],info['updatetime'],info['week']))
        lis.insert(1,"天气: %s"%info["weather"])
        lis.insert(2,"温度: {}°    温度范围:{}°~{}°".format(info['temp'],info['templow'],info['temphigh']))
        lis.insert(3,"空气质量: {}   {}       ".format(infob['quality'],infobb['affect']))
        lis.insert(4,"建议:{}".format(infobb['measure']))
        lis.insert(5,"风向: {}    风级: {}".format(info['winddirect'],info['windpower']))
        lis.insert(6,"各项指数:")
        value=[];index=6
        for item in infoa:
            #提取字典里面的值
            for v in item.items():
                value.append(v[1])
            index+=1
            lis.insert(index,"{}:  {}".format(value[0],value[1]))
            index+=1
            lis.insert(index,"%s"%value[2])
            index+=1
            lis.insert(index," ")
            value.clear()
def showbg():
    #显示图片
    bm=ImageTk.PhotoImage(file="weather.jpg")
    label1=Label(window,image=bm)
     #背景图片
    label1.bm=bm
    label1.grid(row=1,columnspan=3)
        
        
#创建窗口
window=Tk()
#设置标题
window.title("天气查询(可查县市省)")
#设置窗口图标 
window.iconbitmap('cloudy2.ico')
#设置窗口大小,并布局接近中间的位置
window.geometry("900x640+540+300")
#设置标签
label=Label(window,text="请输入要查询城市的名字:",font=("微软雅黑",20),fg='blue')
#定位 grid网格布局
label.grid()
#添加输入框 并布局
entry=Entry(window,font=('微软雅黑',20),width=30,fg='blue')
entry.grid(row=0,column=1)
#列表控件
lis=Listbox(window,font=("微软雅黑",12),width=90,height=25)
lis.grid(row=1,columnspan=3)
#showbg()
#设置按钮
button=Button(window,text="查询",width=10,height=1,command=getWeather)
#设置按下按钮的背景颜色
button['activebackground']='green'
#设置按下按钮的字体颜色
button['activeforeground']='red'
#
button['cursor']='heart'
#定位 左对齐 sticky:对齐方式 N S W E
button.grid(row=2,column=0,sticky=W)
#command 点击触摸事件
Button(window,text="退出",width=10,height=1,command=window.quit).grid(row=2,column=1,sticky=E)
#显示窗口,消息循环
window.mainloop()

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/memory_qianxiao/article/details/81121124

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签