`
zwcan241
  • 浏览: 1573 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

用wxpython写的一个天气预报

阅读更多
自学了半个多月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='<font  color="#444444">城市——%s</font>&nbsp;&nbsp;&nbsp;&nbsp;<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()
 




  • 大小: 86.3 KB
分享到:
评论

相关推荐

    使用wxPython显示天气信息代码

    在本文中,我们将深入探讨如何使用wxPython库创建一个应用程序,该程序能够显示通过BeautifulSoup库抓取的天气预报信息。wxPython是一个流行的GUI工具包,用于构建跨平台的Python应用,而BeautifulSoup则是一个强大...

    wxPython2.8-win64-unicode-2.8.12.1-py27 wxPython2.8-win32-unicode-2.8.12.1-py27

    例如,你可以用wxPython制作一个天气预报应用,显示实时气象信息,或者创建一个图片查看器,支持缩放、旋转和保存图片。 总的来说,wxPython是一个强大且灵活的GUI工具包,结合Python的简洁性和易读性,使得开发...

    Weather:wxPython编写界面的天气预报小程序

    wxPython编写界面的天气预报小程序 1、简介: 基于“三思之旅”博客( Soup 实现对中国天气( 2、优化及改动部分: (1)修改从网页获取天气图标,不需要本地存储 (2)修改wx.ListCtrl中获取item值的方式为self.list...

    天气预报源码

    4. **编程语言**:实现天气预报代码可以使用多种编程语言,如Python、Java、JavaScript、C#等。选择哪种语言取决于项目需求、开发者的熟悉程度以及平台兼容性。 5. **前端展示**:如果这是一个Web应用,前端可能...

    天气预报更新程序

    在IT行业中,天气预报更新程序是一个常见的应用,它主要用于获取并显示最新的气象信息,以便用户了解当地或指定地区的天气状况。下面将详细讲解这个程序的相关知识点。 首先,我们需要理解“天气预报更新”这一概念...

    树莓派天气预报

    【树莓派天气预报】项目涉及的是利用树莓派这一小型单板计算机来实现本地化的天气显示功能。树莓派是一种低成本、高性能的微型电脑,常被爱好者用于各种DIY项目,包括智能家居、机器人控制以及我们这里讨论的天气...

    打造自己的天气预报之(三)——给程序加个图形用户界面(GUI)

    在本项目中,我们将探讨如何为一个简单的天气预报程序添加图形用户界面(GUI),从而提升用户体验。这个教程的第三部分将重点关注使用Python编程语言来构建GUI。提供的压缩包包含两个Python脚本(MyFrame.py、...

    调用天气预报

    标题“调用天气预报”指的是在编程环境中通过接口或者API获取实时天气信息的过程。这个过程通常涉及网络请求、数据解析和界面展示等多个技术环节。在这个过程中,开发者可能会使用到各种编程语言,如Python、Java、...

    weather-app:一个用python编写的天气应用程序,用于从网站检索天气数据

    这个应用可能包含了用户界面,允许用户输入城市名或地理位置来获取相关的天气预报。Python是一种广泛使用的高级编程语言,尤其适合进行网络数据抓取和处理,因为它有丰富的库支持,如BeautifulSoup、Requests等。 ...

    调用天气接口案例1234

    通过调用天气接口,我们可以获取实时的天气状况,包括温度、湿度、风向、风速等信息,为用户的应用程序或网站提供动态的天气预报服务。 描述中提到的链接指向了一篇CSDN博客文章,虽然原文没有提供具体的链接内容,...

    时间天气栏

    总的来说,“时间天气栏”结合了时间显示和天气预报两大功能,通过精巧的设计和动态效果,为用户提供实用且美观的桌面工具。其背后涉及的技术涵盖了接口通信、图形渲染、用户界面设计等多个领域,是软件工程中一个...

    ceefax:天气图

    标题中的"ceefax:天气图"指的是一个项目或应用,它模仿了BBC的图文电视服务Ceefax上的天气预报展示方式。Ceefax是一种早期的交互式电视信息服务,通过模拟电视信号提供文本和简单的图形信息,其中包括天气预报。在...

    基于Python开发气象服务器运行系统界面.pdf

    - 将MM5系统移植并改进到气象服务器上,可以降低气象台工作人员劳动强度,实现更准确的天气预报。 - 气象服务器可以提供实时预报、中尺度数值预报、区域气候预报、航空航海等气象保障服务。 6. 技术实现的关键点...

    Hotel Management System Using Python.zip

    4. 集成第三方服务:如天气预报、交通信息等,提升用户体验。 总结,Python实现的酒店管理系统通过结合强大的编程能力和丰富的库支持,为酒店提供了全面、高效的管理工具。无论是小型旅馆还是大型连锁酒店,都能...

    天气

    标题 "天气" 提供的信息可能是指一个项目或应用,它与获取、处理或展示天气相关数据有关。在 IT 领域,特别是在 Python 编程中,开发这样的系统通常涉及 Web API 的使用,数据解析,以及可能的可视化技术。下面我们...

    Weather-Program

    这个程序旨在帮助用户轻松地获取他们关心的地点的实时或未来几天的天气预报。通过集成API接口,天气程序可以提供温度、湿度、风速等关键气象信息,以及可能的天气状况如晴天、雨天、雾霾等。 在Python编程中,实现...

    Weatherapp

    5. **时间与日期处理**:展示未来几天的天气预报时,需要处理日期和时间。Python的`datetime`模块是进行此类计算的理想工具。 6. **异常处理**:为了确保应用程序的健壮性,开发者需要处理可能出现的错误和异常,...

    Weather-App

    对于更高级的应用,可以考虑增加如多城市天气查询、天气预报、地图展示等功能。同时,为了提升用户体验,可以采用异步请求避免阻塞UI,或者使用更强大的GUI库如PyQt或wxPython。 总结来说,"Weather-App"是一个很好...

    行程计划

    在行程计划项目中,Python可以用于处理各种任务,如数据管理(存储和检索行程信息)、日期和时间计算、网络请求(获取天气预报、交通信息等)以及用户界面开发。 1. 数据管理:Python的内置数据结构如列表、字典等...

    FindYourWeather:天气预报瓶应用程序

    4. **Web API接口**:例如使用OpenWeatherMap或WeatherAPI等提供天气预报服务的API,需要注册获取API密钥并学习如何正确使用它们提供的接口。 5. **GUI编程**:可能使用了Python的图形用户界面库,如Tkinter、PyQt...

Global site tag (gtag.js) - Google Analytics