[Python]GUI編程練習 — 擷取天氣預報

來源:互聯網
上載者:User
文章目錄
  • 需求:
  • 設計:
  • 編碼:
  • 測試:
  • 總結:

第一個小應用:  案頭天氣

需求:

背景:
簡單的一個桌面視窗,顯示某地區的天氣情況,每小時一次
來源,使用者:
自己
價值:
編程練習 

設計:

使用tkinter做出一個小視窗,後天通過中央氣象的json介面獲得天氣情況,手動更新也可以
首先解決擷取json並解析,然後是視窗顯示。

編碼:

#coding:utf8#python2.73 winxp '''天氣外掛程式: 使用json接受中氣象的本地資訊,顯示使用tkinterurl http://www.weather.com.cn/data/sk/101221201.htmlv0.1'''from Tkinter import *import jsonimport urllibimport timedef getWeaInfo():    url = r'http://www.weather.com.cn/data/cityinfo/101221201.html'    res = urllib.urlopen(url)  #返回的是個json樣式的字串    weatherinfo = {}    jinfo = res.read().decode('utf8')  #jinfo是一個unicode對象,而我們要的是一個json,然後解析    info = json.loads(jinfo)  #變成索引值對        if info:        try:            weatherinfo['city'] = info['weatherinfo']['city']  #城市            weatherinfo['tempH'] = info['weatherinfo']['temp1']  #高溫            weatherinfo['tempL'] = info['weatherinfo']['temp2']  #低溫            weatherinfo['weather'] = info['weatherinfo']['weather']  #天氣            weatherinfo['ptime'] = info['weatherinfo']['ptime']  #發布時間        except KeyError,e:            print 'Do not get the key',e.message    return weatherinfoclass WeatherFrame:    '''    用於顯示主架構    '''    def __init__(self):        self.root = Tk()                #一個標題        self.title = Label(self.root,text=u'天氣情況')        self.title.pack(side= TOP)                #四對資訊框        self.fm1 = Frame(self.root)        self.label_city = Label(self.fm1,text=u'城市')        self.label_city.pack(side=LEFT, expand=YES)        self.text_city_e = StringVar()        self.text_city = Entry(self.fm1, text='', state='readonly', textvariable=self.text_city_e)        self.text_city.pack(side=LEFT, expand=YES)        self.fm1.pack(side=TOP)                self.fm2 = Frame(self.root)        self.label_temph = Label(self.fm2,text=u'高溫')         self.label_temph.pack(side=LEFT, expand=YES)        self.text_temph_e = StringVar()        self.text_temph = Entry(self.fm2, text='', state='readonly', textvariable=self.text_temph_e)        self.text_temph.pack(side=LEFT, expand=YES)        self.fm2.pack(side=TOP)                    self.fm3 = Frame(self.root)        self.label_templ = Label(self.fm3,text=u'低溫')        self.label_templ.pack(side=LEFT, expand=YES)        self.text_templ_e = StringVar()        self.text_templ = Entry(self.fm3, text='', state='readonly', textvariable=self.text_templ_e)        self.text_templ.pack(side=LEFT, expand=YES)        self.fm3.pack(side=TOP)                self.fm4 = Frame(self.root)        self.label_weather = Label(self.fm4,text=u'天氣')        self.label_weather.pack(side=LEFT, expand=YES)        self.text_weather_e = StringVar()        self.text_weather = Entry(self.fm4, text='', state='readonly', textvariable=self.text_weather_e)        self.text_weather.pack(side=LEFT, expand=YES)        self.fm4.pack(side=TOP)                    #兩個操作按鈕        self.fm5 = Frame(self.root)        self.button_pull = Button(self.fm5, text=u'擷取', command=self.pullWeaInfo)        self.button_pull.pack(side=LEFT, expand=YES)        self.button_quit = Button(self.fm5, text=u'退出', command=self.root.quit)        self.button_quit.pack(side=LEFT, expand=YES)        self.fm5.pack(side=TOP)                        self.pullWeaInfo()         def pullWeaInfo(self):        #推送天氣資訊,初始化推送,手動更新        weainfo = getWeaInfo()        self.text_city_e.set(weainfo['city'])        self.text_temph_e.set(weainfo['tempH'])        self.text_templ_e.set(weainfo['tempL'])        self.text_weather_e.set(weainfo['weather'])        print ('lastest updated time is  %s'%time.ctime())        if __name__=='__main__':    wf = WeatherFrame()    mainloop()

測試:總結:很簡陋,功能是有了,需要做的還有很多,積累經驗。

有些東西沒有用過就是不知道會出現什麼問題,可能一點點的問題就會把時間托的很久,所以一定要把功底弄紮實,還要有靈活多變的應對策略,解決方案的思路和快速的思考能力是要有意識的培養才行。就是因為一個json字典轉換的編碼問題弄了好長時間。。。真需要多練習,加油。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.