wxpython 下拉框只能选择不能输入_用wxPython创建GUI应用程序展示NASA图片(第三部分)...
?
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應用程序
總結
以上是生活随笔為你收集整理的wxpython 下拉框只能选择不能输入_用wxPython创建GUI应用程序展示NASA图片(第三部分)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu安装php7.2
- 下一篇: python列表元组字符串都属于有序数列