前面我们做了一个简单的视窗应用,已经对 PySimpleGUI 有了大概的 “感觉”,做出来的东西别管多简单吧,起码有点 “产品” 的意思了。上一节实现的 demo

其实这个简单的作品,已经具备了一个典型视窗的绝大多数要素:蓝图,上一节中的 layout,它是一个 成员为 list 的 list,定义了窗口的长相;

window;

响应用户事件,那个 event,希望你还记得它;

获得用户输入,当然是上一节里的 values。event 和 values 只是约定的名称,你当然可以将 window.read() 的返回值解包为其他变量。

约定为 event、values,我们就都明白说的是 read 函数返回值的第一项和第二项。

再罗列一下目前已经使用过的组件:

已经掌握的控件

图中有些内容有点多,再罗列一下:Text,显示文本标签;

Input,输入框

Button,按钮

基于这些简单素材,就足够我们制作一些有相当实用价值的工具了。

一起加油,做个天气预报小工具。

你也可以在线运行本期代码

绘制蓝图

依照惯例,第一步确定天气预报小程序需要什么信息:城市(只做国内主要城市),用熟悉的 Input;

一个按钮,点击查询天气;

还需要一个地方展示天气,依然使用 Input,将天气填进去就好。

在两个输入框左侧,还会有两个 Text 作为输入框的标题。

总共 5 个组件,其实都是比较熟悉的组件了,还蛮简单的。

按照自己的审美,绘制一个效果图,你可以用纸笔绘制。希望你可以将图中的组件类型标注出来。

参考这个图纸,可以开始完成一部分代码,实现蓝图,并把它显示出来。

如果你用的是 https://repl.it/ 在线编程环境,它不支持中文,所有显示内容必须是英文。

import PySimpleGUI as sg

# 让所有文本居中

sg.SetOptions(text_justification='center')

layout = [

[ sg.Text("City", size = (20, 1)), sg.Input(key = "-CITY-") ],

[ sg.Text("Weather", size = (20, 1)), sg.Input(key = "-WEATHER-") ],

[ sg.Button("Submit")]

]

window = sg.Window("Weather App", layout)

event, values = window.read()

print(event, values)

window.close()

注意到 Text 被指定了 size 参数,用一个 tuple 表示组件的大小。size = (20, 1) 表示 20 长,高为 1,单位不详。

点击 run 就会看到界面了,天气预报小工具的界面

在视图窗口中 City 栏输入 “Beijing”,点击 Submit,会在下面的命令行输出:

Submit {'-CITY-': 'Beijing', '-WEATHER-': ''}

不出意外的话,城市名称通过 values["-CITY-"] 就能得到。

获取天气信息

下来的问题就是怎么获得天气预报了,计算机本身是不可能知道天气的,怎么办呢?上网啊!通过互联网可以找到开放的天气预报接口。什么是接口

不同于面向用户的网址(URL),接口返回的是单纯的数据,而非花花绿绿的网页。这样的 URL 就是接口,面向的是开发人员,而非最终用户。如果你开始接触网络接口,恭喜你已经是开发者的一员了。

我已经为大家找到两个接口可用:

你可以将上面的 URL 在浏览器中打开,数据会被下载为文件,打开会看到:下载的文件内容

它们就是网络接口返回的数据,不是网页而是单纯的数据,这样的数据格式称为 Json。

将内容复制到在线 json 格式化工具 https://www.json.cn/ 左侧窗口,数据会更易读:Json 在线格式化工具

{

"data":{

"yesterday":{

"date":"2日星期一",

"high":"高温 4℃",

"fx":"西南风",

"low":"低温 -4℃",

"fl":"",

"type":"晴"

},

"city":"北京",

"forecast":[

{

"date":"3日星期二",

"high":"高温 8℃",

"fengli":"",

"low":"低温 -4℃",

"fengxiang":"西南风",

"type":"晴"

},

{

"date":"4日星期三",

"high":"高温 8℃",

"fengli":"",

"low":"低温 -5℃",

"fengxiang":"西南风",

"type":"晴"

},

{

"date":"5日星期四",

"high":"高温 3℃",

"fengli":"",

"low":"低温 -6℃",

"fengxiang":"东风",

"type":"晴"

},

{

"date":"6日星期五",

"high":"高温 3℃",

"fengli":"",

"low":"低温 -6℃",

"fengxiang":"西南风",

"type":"晴"

},

{

"date":"7日星期六",

"high":"高温 4℃",

"fengli":"",

"low":"低温 -6℃",

"fengxiang":"东北风",

"type":"晴"

}

],

"ganmao":"昼夜温差很大,易发生感冒,请注意适当增减衣服,加强自我防护避免感冒。",

"wendu":"8"

},

"status":1000,

"desc":"OK"

}

这样清晰多了吧,看起来很像 Python 中的字典是吧!这就是网络接口返回的数据。如果这些数据保存在 ret 变量中,那肯定可以通过 ret["data"]["forecast"][0] 获得明天的天气了!没错,但是需要先借助 json 库将它转换为 Python 字典才行,现在它还是 String。

我们的小程序怎么获得这个网络接口的数据呢?感谢 Python 强大的生态,request 库可以帮助我们,不借助浏览器也能访问网络接口。

总结

根据上面掌握的信息,就有了获取天气的基本思路用 requests 库请求网络接口;

用 json 库将返回的内容转换为 Python 字典;

访问字典得到天气预报

将天气字符串显示到视窗中的 Input 中,到时候会调用 Input 组件的 update 函数。

做到这一步,已经可以根据图纸实现包含 5 个组件的窗口,我们离成功只有一步之遥了!

下面是 requests 库的文档,可以提前了解基本用法,预习是个好习惯。

劳逸结合,不要太累,明天继续咯!

关注我,了解程序员的烧脑日常,还有开源的视频教程。

python天气预报界面_Python 做 UI 超 easy!(3.1)——天气预报小工具相关推荐

  1. python天气预报界面_Python开发,用GUI编写一个天气查询桌软件

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于快学Python ,作者叶庭云 刚接触Python的新手.小白,可以复制下面的链接去 ...

  2. python操作界面_Python使用PyQt5的Designer工具创建UI界面

    一.Designer-UI编辑器 Designer是pyqt5-tools带的工具,默认可以在Python安装目录下找到的.我的之前项目导入过pyqt5-tools,所以我直接全盘搜索到了. 打开de ...

  3. python整人程序_python—做一个恶搞程序

    python-做一个恶搞程序 very easy print("You can't win this game") #你不可能赢这个游戏 n = int(input("B ...

  4. python制作恶搞_python—做一个恶搞程序

    python-做一个恶搞程序 very easy print( You can t win this game ) #你不可能赢这个游戏 n = int(input( Between 1 and 10 ...

  5. python做一个登录注册界面_python做一个登录注册界面的方法

    python做一个登录注册界面的方法 发布时间:2020-08-21 10:37:05 来源:亿速云 阅读:111 作者:小新 这篇文章主要介绍python做一个登录注册界面的方法,文中介绍的非常详细 ...

  6. python 天气预报制作_Python 制作语音天气预报播报程序

    之前在参加Python爬虫小分队的学习时,爬取过中国天气网这个网站,可以通过爬虫获取当地的天气信息,今天和大家分享一个将爬虫得到的天气文本信息通过百度语音合成接口制作成语音文件,并进行语音播报. 百度 ...

  7. python操作界面_python页面操作

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python操作mongodb1.1. 前言1.2. 综合应用python操作m ...

  8. python文本去重_Python做文本按行去重的实现方法

    文本: 每行在promotion后面包含一些数字,如果这些数字是相同的,则认为是相同的行,对于相同的行,只保留一行. 思路: 根据字典和字符串切割. 建立一个空字典. 读入文本,并对每行切割前半部分, ...

  9. python分类预测_python做logistic分类预测尝试

    首先需要明确一点是logistics回归和线性回归的区别: 1线性回归的因变量Y是连续性变量,而logistics回归是分类变量. 2线性回归最后可以通过函数y=a1x1+a2x2...去描述,而lo ...

最新文章

  1. Linux命令——mv
  2. SAP SM12 解锁Lock Table
  3. Linux C语言错误处理
  4. 腾讯云+FFmpeg打造一条完备高效的视频产品链
  5. ansible命令参数介绍
  6. 关于 jquery select2 多个关键字 模糊查询的解决方法
  7. mysql为什么行数据库_关系数据表中的行称为什么?
  8. 使用route命令解决一机双网访问
  9. Linux 4.21优化Zen 2架构
  10. 前端入门 前端实战项目 JS
  11. 双参数cfar c语言代码,一种多目标环境下的SAR图像双参数CFAR检测方法与流程
  12. 实际使用Windows 7中的Readyboost功能
  13. 解决VS2016中Scanf运行错误
  14. 小米系列手机 开发者版本 之 USB安装出现当前设备已被临时限制
  15. Flask构建微信订餐小程序②-全站统计
  16. 弘扬奥运精神,我们49行画个奥运五环
  17. 软件测试流程-全程软件测试
  18. 在Debian环境下架设PPPoE效劳器-2
  19. 流体力学课上的老师这句话,让我义无反顾的上了CFD这艘“贼船”
  20. 搜索日志、如何搜索日志

热门文章

  1. 网络对抗技术-Exp2-后门原理与实践 20181314
  2. 为什么婚戒要带在无名指上 (Why wedding ring should put on the forth finger)
  3. Ubuntu下DOL开发环境配置
  4. 游戏开发部的培训课程
  5. 概率论与数理统计(3.3)二维随机变量条件分布
  6. fiddle解决ajax,AJAX in jsFiddle
  7. Deep Feedback Network for Recommendation
  8. 删除 KubeSphere 中一直卡在 Terminating 的 Namespace
  9. RUNOOB JavaScript 基础语法
  10. Python零基础学习 | 分享一个使用Python画出太极阴阳八卦图的代码