wxpython 下拉框只能选择不能输入_用wxPython创建GUI应用程序展示NASA图片(第三部分)...

regular_search.py脚本

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

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

  • on_download()
  • on_selection()
  • update_image()
  • update_search_results()
  • The Result class

下面是模块中的前几行:

5909a8cb022b347001dd6efbf9a4b023.png

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

接下来创建RegularSearch类:

e4a08a99137aa6880b24f876aa6f3523.png

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

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

8eae08cf9b7c0413072c768668ebc3f5.png

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

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

2626e8d0a2d05c2ca286b29b9e60fd3b.png

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

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

d79ffb892be470ed0af565778f845aed.png

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

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

advanced_search.py脚本

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

让我们从最上层开始:

e88224af54c2e044a5e11c33c82fb57f.png

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

以下是其余的过滤器:

017f248b737a6c99d3d62fcd2c23b159.png

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

下面将实现ui_helper()方法:

5cf7940eba520522c137667274fa1e9a.png

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

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

d5e4e5e5b7bac8aa604b383684c4f05b.png

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

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

63a09a97a927d8eedc818ad8d1eb6331.png

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

download_dialog.py脚本

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

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

48d55f692988415523c83fbe450ffae6.png

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

打包

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

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

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

  • 缓存搜索结果
  • 在后台下载缩略图
  • 在后台下载链接

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

代码下载

  • 源码由tarball打包

相关阅读

  • 基于wxPython实现计算器
  • 如何分发wxPython应用程序
英文原文:https://www.blog.pythonlibrary.org/2019/04/18/creating-a-gui-application-for-nasas-api-with-wxpython/ 译者:我是昵称耶~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值