首頁 > 後端開發 > Python教學 > 用wxpython寫的一個天氣預報

用wxpython寫的一個天氣預報

巴扎黑
發布: 2016-12-09 11:43:01
原創
1630 人瀏覽過

自學了半個個多月python和wx,想寫個天氣預報練練手,可是寫的時候遇到了很多問題,非常糾結,索性把東西上傳給各位看看。東西很簡單,就幾十行程式碼,以後有空還會繼續增加功能。現在上傳的目的是希望有經驗的人指點指點。 

碰到的問題有這幾個: 

1、怎麼為panel設定背景圖片,並實現半透明。 

2、使用png圖片的時候,有的圖片可以實現透明,有的不可以。 

3、staticText背景總是為frame的背景,怎麼去掉。 

4、StaticBitmap透明的問題也很棘手。 

暫時就這幾個,好像還有好多,想不起來了。 

程式碼寫的不是很規範,湊合來看吧。呵呵 

# -*- coding: utf-8 -*-
import  wx
import  wx.html 
import urllib
import thread
import re
import sys 
reload(sys) 
sys.setdefaultencoding('utf8') 
#----------------------------------------------------------------------
class TestFrame(wx.Frame):
    def __init__(self, parent,):
        wx.Frame.__init__(self, parent, -1, "天气预报",
                         style =
                           wx.FRAME_SHAPED
                         | wx.SIMPLE_BORDER
                         | wx.FRAME_NO_TASKBAR
                         )
        self.count=0
        self.weatherInfo=''#天气信息
        self.hasShape = False
        self.Bind(wx.EVT_LEFT_DOWN,self.OnLeftDown)
        self.Bind(wx.EVT_LEFT_UP,self.OnLeftUp)
        self.Bind(wx.EVT_MOTION,self.OnMouseMove)
        self.delta = (0,0)
        self.bmp=wx.Image('bg.png',wx.BITMAP_TYPE_PNG,-1).ConvertToBitmap()
        self.w, self.h = self.bmp.GetWidth(), self.bmp.GetHeight()#获取图片背景长宽
        self.bmp.SetMask(wx.Mask(self.bmp, wx.BLACK))   
        self.SetClientSize( (self.w,self.h) )
        self.SetWindowShape()
        self.html= wx.html.HtmlWindow(self,-1,(self.w-230,50),(200,150))#天气信息显示区域
        self.initCloseButton()#初始化关闭按键
        self.initimg()#初始化天气图片
        self.Bind(wx.EVT_PAINT,self.OnPaint)
        thread.start_new_thread(self.getWeatherInfo,(1,2))#开启获取天气线程
    def initCloseButton(self):
        self.closebmp=wx.Image('no.png',wx.BITMAP_TYPE_PNG,-1).ConvertToBitmap()
        self.closebmp.SetMask(wx.Mask(self.closebmp,wx.BLACK))
        button=wx.BitmapButton(self, -1,self.closebmp,style=wx.NO_BORDER,pos=(self.w-30,20))   
        button.SetDefault()
        self.Bind(wx.EVT_BUTTON, self.onButtonClick,button)
    def getWeatherInfo(self,no,interval):
            web=urllib.urlopen('http://m.weather.com.cn/data/101190101.html')
            self.weatherInfo=web.read()
            web.close()
            print self.weatherInfo
            self.updateText()
    def updateText(self):
        weatherinfo=eval(self.weatherInfo)['weatherinfo']
        for i in weatherinfo:
            print i,weatherinfo[i]
        city=weatherinfo['city'].decode('utf-8')
        print city
        strs=&#39;<font  color="#444444">城市——%s</font>    <font   color="red" size="1">%s</font><br> \
             <font color="#444444">气温:%s<br>天气:%s</font><br>\
             <font color="#444444">风向:%s</font><br><br>\
             <font color="#444444">  </font>&#39;%(weatherinfo[&#39;city&#39;].decode(&#39;utf-8&#39;)
                                               ,weatherinfo[&#39;week&#39;].decode(&#39;utf-8&#39;)
                                               ,weatherinfo[&#39;temp1&#39;].decode(&#39;utf-8&#39;)
                                               ,weatherinfo[&#39;weather1&#39;].decode(&#39;utf-8&#39;)
                                               ,weatherinfo[&#39;wind1&#39;].decode(&#39;utf-8&#39;))
        self.html.SetPage(strs)
        imgno= weatherinfo[&#39;img2&#39;]
        imgno=re.findall(r&#39;\d&#39;,imgno)
        print imgno[0]
        self.bmp2=wx.Image(&#39;images/w%s.png&#39;%imgno[0],wx.BITMAP_TYPE_PNG,-1).ConvertToBitmap()  #更改天气图片 
        self.Refresh()#刷新窗口
    def initimg(self):
        self.bmp2=wx.Image(&#39;images/w0.png&#39;,wx.BITMAP_TYPE_PNG,-1).ConvertToBitmap()
    def SetWindowShape(self, *evt):
        r = wx.RegionFromBitmap(self.bmp)
        self.hasShape = self.SetShape(r)
    def OnPaint(self, evt):
        dc = wx.PaintDC(self)
        dc.DrawBitmap(self.bmp, 0,0, True)
        dc.DrawBitmap(self.bmp2, 10, 20, True)
    def onButtonClick(self,evt):
        print &#39;按键点击&#39;
        self.Destroy()
 
   
    def OnLeftDown(self, evt):
        self.CaptureMouse()
        x, y = self.ClientToScreen(evt.GetPosition())
        originx, originy = self.GetPosition()
        dx = x - originx
        dy = y - originy
        self.delta = ((dx, dy))
    def OnLeftUp(self, evt):
        if self.HasCapture():
            self.ReleaseMouse()
    def OnMouseMove(self, evt):
        if evt.Dragging() and evt.LeftIsDown():
            x, y = self.ClientToScreen(evt.GetPosition())
            fp = (x - self.delta[0], y - self.delta[1])
            self.Move(fp)     
 
#----------------------------------------------------------------------
app=wx.PySimpleApp()
win = TestFrame(None)
win.Show(True)
app.MainLoop()
登入後複製

 


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板