wxpython 下拉框只能选择不能输入_用wxPython创建GUI应用程序展示NASA图片(第三部分)...
?
regular_search.py腳本
regular_search模塊包含重構(gòu)的ObjectListView,用于顯示搜索結(jié)果,其上還包含下載按鈕。
下面這些方法/類由于已經(jīng)在前面提及,這里將不再闡述:
- on_download()
- on_selection()
- update_image()
- update_search_results()
- The Result class
下面是模塊中的前幾行:
這里導(dǎo)入了version_1中的nasa_search_ui.py的全部模塊,同時(shí)還需要使用base_url向NASA的圖像API發(fā)送請求。唯一新導(dǎo)入的是pubsub。
接下來創(chuàng)建RegularSearch類:
此代碼將search_results列表初始化為空并設(shè)置圖像的max_size。它還設(shè)置了一個(gè)sizer和ObjectListView部件,用于向用戶展示搜索結(jié)果。當(dāng)所有類組合在一起時(shí),代碼實(shí)際上非常類似于代碼的第一次迭代。
以下是__init__()的其余代碼:
首先在main_sizer中添加一個(gè)spacer。然后添加標(biāo)題和圖像相關(guān)部件,最后添加一個(gè)下載按鈕。
接下來,需要編寫一個(gè)新方法:
reset_image()方法用于將wx.StaticBitmap重置為空。當(dāng)用戶先使用常規(guī)搜索,再使用高級(jí)搜索時(shí),可能會(huì)發(fā)生這種情況。重制圖像可避免用戶看到之前的選擇內(nèi)容而感到困惑。
最后需要實(shí)現(xiàn)的方法是load_search_results():
當(dāng)使用pubsub時(shí),將調(diào)用load_search_results()方法。main和advanced_search模塊通過傳遞請求參數(shù)來調(diào)用,然后將結(jié)果編碼為格式化的URL。接下來使用requests發(fā)送JSON請求,然后提取結(jié)果。此時(shí)也會(huì)調(diào)用reset_image()方法,以便在加載一組新結(jié)果時(shí),不會(huì)選擇任何內(nèi)容。
接下來就可以實(shí)現(xiàn)高級(jí)搜索了!
advanced_search.py腳本
advanced_search模塊作為wx.Panel,包含對NASA API進(jìn)行高級(jí)搜素所需的全部部件。如果您閱讀他們的文檔,您會(huì)發(fā)現(xiàn)大約有十幾個(gè)過濾器可以用于搜索。
讓我們從最上層開始:
設(shè)置各種過濾器的代碼非常相似,為過濾器創(chuàng)建一個(gè)文本控件,然后將其與一個(gè)字符串傳遞給ui_helper(),該字符串是文本控件的標(biāo)簽。重復(fù)上述步驟,直到完成所有的設(shè)置。
以下是其余的過濾器:
最后,將sizer設(shè)置為main_sizer。注意,并非所有NASA API中的過濾器都在此代碼中實(shí)現(xiàn)。例如,我并沒有添加media_type,因?yàn)榇藨?yīng)用只用于圖像搜索。但是,如果需要搜索視頻或音頻,可以更新此程序。此外,year_start和year_end也未實(shí)現(xiàn)。如果需要,可隨時(shí)添加。
下面將實(shí)現(xiàn)ui_helper()方法:
ui_helper()用于標(biāo)簽文本和文本控制部件,然后創(chuàng)建一個(gè)wx.BoxSizer和wx.StaticText。由于傳入文本控制部件,wx.StaticText被添加進(jìn)sizer。最后,將新的sizer添加到main_sizer中。這是減少冗余代碼的好方法。
最后在類中需要?jiǎng)?chuàng)建on_search():
當(dāng)用戶按下“搜索”按鈕時(shí),將調(diào)用此事件處理程序。它根據(jù)用戶輸入字段作為查詢條件進(jìn)行搜索,然后程序?qū)⑼ㄟ^pubsub發(fā)送兩條消息。第一條消息將更新UI,以便隱藏高級(jí)搜索并顯示搜索結(jié)果。第二條消息則執(zhí)行對NASA API的搜索。
高級(jí)搜索頁面的樣式如下:
接下來將更新下載對話框。
download_dialog.py腳本
下載對話框有幾處小更改,需要導(dǎo)入Python的os模塊并更新save()函數(shù)。
在函數(shù)的開頭添加如下代碼:
添加此代碼是為了說明用戶在保存文件名中未指定擴(kuò)展名的情況。
打包
本文涵蓋了許多有趣的新內(nèi)容,講述了一種沒有Python包的情況下使用開放式API的方法。通過本文,您了解到閱讀API文檔的重要性,學(xué)習(xí)了如何實(shí)現(xiàn)用戶界面。此外,還掌握了如何解析JSON以及下載圖像。
盡管本文未曾提及,Python提供一個(gè)json模塊用于解析。
當(dāng)然,此應(yīng)用程序還存在可完善的地方:
- 緩存搜索結(jié)果
- 在后臺(tái)下載縮略圖
- 在后臺(tái)下載鏈接
可以利用線程下載縮略圖和較大的圖像以及一般的Web請求,這有助于改善程序性能。您可能已經(jīng)注意到,程序存在響應(yīng)緩慢的問題,這取決于您的網(wǎng)絡(luò)狀況。這是因?yàn)楫?dāng)執(zhí)行Web請求或下載文件時(shí),它會(huì)阻塞UI的主循環(huán)。如果發(fā)生類似情況,建議使用線程。
代碼下載
- 源碼由tarball打包
相關(guān)閱讀
- 基于wxPython實(shí)現(xiàn)計(jì)算器
- 如何分發(fā)wxPython應(yīng)用程序
總結(jié)
以上是生活随笔為你收集整理的wxpython 下拉框只能选择不能输入_用wxPython创建GUI应用程序展示NASA图片(第三部分)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu安装php7.2
- 下一篇: python列表元组字符串都属于有序数列