wxpythonで書いた天気予報
5599 ワード
半月以上pythonとwxを独学して、天気予報を書いて練習したいと思っていましたが、書いている間に多くの問題に遭遇して、とても悩んで、いっそ皆さんに物をアップロードしてみました.物は簡単で、数十行のコードだけで、後で暇があれば機能を増やし続けます.今アップロードした目的は経験のある人に教えてもらいたいことです.
問題はいくつかあります.
1、panelに背景画像をどのように設定し、半透明を実現するか.
2、pngピクチャを使用する場合、透明にできるピクチャもあれば、できないピクチャもあります.
3、staticText背景はいつもframeの背景で、どのように削除しますか.
4、StaticBitmapの透明性の問題も厄介です.
しばらくはこのいくつかだけで、まだたくさんあるようで、思い出せません.
コードの書き方が規範的ではないので、間に合わせてみましょう.ほほほ
問題はいくつかあります.
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='<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>'%(weatherinfo['city'].decode('utf-8')
,weatherinfo['week'].decode('utf-8')
,weatherinfo['temp1'].decode('utf-8')
,weatherinfo['weather1'].decode('utf-8')
,weatherinfo['wind1'].decode('utf-8'))
self.html.SetPage(strs)
imgno= weatherinfo['img2']
imgno=re.findall(r'\d',imgno)
print imgno[0]
self.bmp2=wx.Image('images/w%s.png'%imgno[0],wx.BITMAP_TYPE_PNG,-1).ConvertToBitmap() #
self.Refresh()#
def initimg(self):
self.bmp2=wx.Image('images/w0.png',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 ' '
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()