用wxPython创建GUI应用程序展示NASA图片(第三部分)

2019 年 5 月 8 日 Python程序员

regular_search.py脚本

regular_search模块包含重构的ObjectListView,用于显示搜索结果,其上还包含下载按钮。

下面这些方法/类由于已经在前面提及,这里将不再阐述:

  • on_download()

  • on_selection()

  • update_image()

  • update_search_results()

  • The Result class

下面是模块中的前几行:

这里导入了version_1中的nasa_search_ui.py的全部模块,同时还需要使用base_url向NASA的图像API发送请求。唯一新导入的是pubsub。

接下来创建RegularSearch类:

此代码将search_results列表初始化为空并设置图像的max_size。它还设置了一个sizer和ObjectListView部件,用于向用户展示搜索结果。当所有类组合在一起时,代码实际上非常类似于代码的第一次迭代。

以下是__init__()的其余代码:

首先在main_sizer中添加一个spacer。然后添加标题和图像相关部件,最后添加一个下载按钮。

接下来,需要编写一个新方法:

reset_image()方法用于将wx.StaticBitmap重置为空。当用户先使用常规搜索,再使用高级搜索时,可能会发生这种情况。重制图像可避免用户看到之前的选择内容而感到困惑。

最后需要实现的方法是load_search_results():

当使用pubsub时,将调用load_search_results()方法。main和advanced_search模块通过传递请求参数来调用,然后将结果编码为格式化的URL。接下来使用requests发送JSON请求,然后提取结果。此时也会调用reset_image()方法,以便在加载一组新结果时,不会选择任何内容。

接下来就可以实现高级搜索了!

advanced_search.py脚本

advanced_search模块作为wx.Panel,包含对NASA API进行高级搜素所需的全部部件。如果您阅读他们的文档,您会发现大约有十几个过滤器可以用于搜索。

让我们从最上层开始:

设置各种过滤器的代码非常相似,为过滤器创建一个文本控件,然后将其与一个字符串传递给ui_helper(),该字符串是文本控件的标签。重复上述步骤,直到完成所有的设置。

以下是其余的过滤器:

最后,将sizer设置为main_sizer。注意,并非所有NASA API中的过滤器都在此代码中实现。例如,我并没有添加media_type,因为此应用只用于图像搜索。但是,如果需要搜索视频或音频,可以更新此程序。此外,year_start和year_end也未实现。如果需要,可随时添加。

下面将实现ui_helper()方法:

ui_helper()用于标签文本和文本控制部件,然后创建一个wx.BoxSizer和wx.StaticText。由于传入文本控制部件,wx.StaticText被添加进sizer。最后,将新的sizer添加到main_sizer中。这是减少冗余代码的好方法。

最后在类中需要创建on_search():

当用户按下“搜索”按钮时,将调用此事件处理程序。它根据用户输入字段作为查询条件进行搜索,然后程序将通过pubsub发送两条消息。第一条消息将更新UI,以便隐藏高级搜索并显示搜索结果。第二条消息则执行对NASA API的搜索。

高级搜索页面的样式如下:

接下来将更新下载对话框。

download_dialog.py脚本

下载对话框有几处小更改,需要导入Python的os模块并更新save()函数。

在函数的开头添加如下代码:

添加此代码是为了说明用户在保存文件名中未指定扩展名的情况。

打包

本文涵盖了许多有趣的新内容,讲述了一种没有Python包的情况下使用开放式API的方法。通过本文,您了解到阅读API文档的重要性,学习了如何实现用户界面。此外,还掌握了如何解析JSON以及下载图像。

尽管本文未曾提及,Python提供一个json模块用于解析。

当然,此应用程序还存在可完善的地方:

  • 缓存搜索结果

  • 在后台下载缩略图

  • 在后台下载链接

可以利用线程下载缩略图和较大的图像以及一般的Web请求,这有助于改善程序性能。您可能已经注意到,程序存在响应缓慢的问题,这取决于您的网络状况。这是因为当执行Web请求或下载文件时,它会阻塞UI的主循环。如果发生类似情况,建议使用线程。

代码下载

  • 源码由tarball打包

相关阅读

  • 基于wxPython实现计算器

  • 如何分发wxPython应用程序

英文原文:https://qiniumedia.freelycode.com/vcdn/1/%E4%BC%98%E8%B4%A8%E6%96%87%E7%AB%A0%E9%95%BF%E5%9B%BE3/pushing-django-orm-to-its-limit.pdf 
译者:忧郁的红秋裤
登录查看更多
0

相关内容

【干货书】高级应用深度学习,294页pdf
专知会员服务
149+阅读 · 2020年6月20日
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
281+阅读 · 2020年6月3日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
223+阅读 · 2020年3月22日
【经典书】Python数据数据分析第二版,541页pdf
专知会员服务
189+阅读 · 2020年3月12日
如何使用自然语言工具包(NLTK)在Python3中执行情感分析
Python程序员
18+阅读 · 2019年10月28日
吐血整理!140种Python标准库、第三方库和外部工具都有了
炼数成金订阅号
14+阅读 · 2019年7月30日
图解NumPy,这是理解数组最形象的一份教程了
机器之心
5+阅读 · 2019年7月12日
7 款实用到哭的App,只说一遍
高效率工具搜罗
84+阅读 · 2019年4月30日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
文本分析与可视化
Python程序员
8+阅读 · 2019年2月28日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
带你走近机器学习——机器学习基础知识及应用
Bidirectional Attention for SQL Generation
Arxiv
4+阅读 · 2018年6月21日
Arxiv
7+阅读 · 2018年4月11日
Arxiv
3+阅读 · 2018年3月21日
VIP会员
相关VIP内容
【干货书】高级应用深度学习,294页pdf
专知会员服务
149+阅读 · 2020年6月20日
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
281+阅读 · 2020年6月3日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
223+阅读 · 2020年3月22日
【经典书】Python数据数据分析第二版,541页pdf
专知会员服务
189+阅读 · 2020年3月12日
相关资讯
如何使用自然语言工具包(NLTK)在Python3中执行情感分析
Python程序员
18+阅读 · 2019年10月28日
吐血整理!140种Python标准库、第三方库和外部工具都有了
炼数成金订阅号
14+阅读 · 2019年7月30日
图解NumPy,这是理解数组最形象的一份教程了
机器之心
5+阅读 · 2019年7月12日
7 款实用到哭的App,只说一遍
高效率工具搜罗
84+阅读 · 2019年4月30日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
文本分析与可视化
Python程序员
8+阅读 · 2019年2月28日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
带你走近机器学习——机器学习基础知识及应用
Top
微信扫码咨询专知VIP会员