#encoding: utf-8
importpygameimporttimeimportweatherAPIimportSystemInfofrom datetime importdatetime#显示图片函数
defShowPicture(picturepath,x0,y0):
background=pygame.image.load(picturepath)
background.convert_alpha()
window.blit(background,(x0,y0))return
defShowCircle():
pygame.draw.circle(window,pygame.Color(255,255,255),(width/2,height/2),radius,fill)return
#划线函数,起始坐标,终点坐标
defShowLine(x0,y0,x1,y1):
pygame.draw.line(window,pygame.Color(255,255,255),(x0,y0),(x1,y1),fill)returnYellow=(255,255,0)
Red=(255,0,0)
LightBlue=(190,190,255)
Green=(0,255,0)
Black=(0,0,0)
White=(255,255,255)#画框函数
defShowRec(x0,y0,x1,y1,color,fill):
pygame.draw.rect(window,color,(x0,y0,x1,y1),fill)return
#字符串显示函数
defShowStr(mystring,x0,y0,size):
font=pygame.font.Font('gkai00mp.ttf',size,bold=1)
textSuface=font.render(mystring,1,pygame.Color(255,255,255))
window.blit(textSuface,(x0,y0))return
defShowStr2(mystring,x0,y0,size):
font=pygame.font.Font('gkai00mp.ttf',size,bold=1)
textSuface=font.render(mystring,1,pygame.Color(255,255,0))
window.blit(textSuface,(x0,y0))return
defShowStr3(mystring,x0,y0,size):
font=pygame.font.Font('gkai00mp.ttf',size,bold=1)
textSuface=font.render(mystring,1,pygame.Color(0,255,0))
window.blit(textSuface,(x0,y0))return
#背景参数设置
width=1280height=800fill=1
#初始化背景
pygame.init()
window=pygame.display.set_mode((width,height),pygame.FULLSCREEN)#全屏#window=pygame.display.set_mode((width,height))#不全屏
window.fill(pygame.Color(0,0,0))#back=pygame.image.load(r"/home/pi/ccj/c.jpg") #图片位置
loop=0
last_ip= ip = ''updatingtime=""Title_X=width
WeatherValidation=FalsewhileTrue:#window.blit(back,(0,0)) #对齐的坐标
window.fill(pygame.Color(0,0,0)) #背景色0为黑
#ShowPicture("a_3.gif",20,450)
#draw grids
#ShowStr(u"时间",10,20,80)
ShowRec(10,10,width-20,height-80,White,1) #画一个大框
ShowLine(10,height/5,width-10,height/5)
ShowLine(10,height/5*3,width-10,height/5*3)
ShowLine(width/2,height/5,width/2,height-70)
ShowLine(width/4,height/5*3,width/4,height-70)
ShowLine(width/4*3,height/5*3,width/4*3,height-70)#time show
mylocaltime=time.localtime()
myclock=time.strftime("%H:%M:%S",mylocaltime)#13:15:03 2017-04-21
ShowStr(myclock,0,0,180)
mydate=time.strftime("%Y-%m-%d",mylocaltime)#2017-04-21
ShowStr(mydate,810,5,90)
mytime=time.strftime("%A",mylocaltime)#Thursday
ShowStr(mytime,830,90,85)
name= "自动化实验室欢迎您"ShowStr2(name,width/2+10,height/5*2-140,52)
ip= SystemInfo.get_ip('wlan0')#ip = SystemInfo.get_ip('eth0')
cpu_usage =SystemInfo.getCPUuse()
ShowStr(ip,width/2+100,height/5*2-90,48)
ShowStr("ip:",width/2+10,height/5*2-90,52)#netspeed show
NetInfoOld=SystemInfo.net_stat()
time.sleep(1)
NetInfoNew=SystemInfo.net_stat()
DownloadSpeed=(NetInfoNew[0]["ReceiveBytes"]-NetInfoOld[0]["ReceiveBytes"])/1048576 #last second total flow -current second total flow
UploadSpeed=(NetInfoNew[0]["TransmitBytes"]-NetInfoOld[0]["TransmitBytes"])/1048576ShowRec(width/2+20,height/5*2-40,DownloadSpeed/10*600+20,48,Green,0)
ShowRec(width/2+20,height/5*2+10,UploadSpeed/10*600+20,48,LightBlue,0)
ShowStr("↓:"+str("%3.2f"%(DownloadSpeed))+"MB/s",width/2+20,height/5*2-40,48)
ShowStr("↑:"+str("%3.2f"%(UploadSpeed))+"MB/s",width/2+20,height/5*2+10,48)#cpu_usage show
ShowRec(width/2+20,height/5*2+60,cpu_usage/100*600+60,48,Yellow,0)
ShowStr("CPU usage:"+str("%2d"%cpu_usage)+"%",width/2+20,height/5*2+110,48)if loop % 60==0 :
future= datetime.strptime('2019-1-1 00:00:00','%Y-%m-%d %H:%M:%S')#当前时间
now =datetime.now()#求时间差
delta = future -now
hour= delta.seconds/60/60minute= delta.seconds/60seconds= delta.seconds - hour*60*60 - minute*60
#print_now=now.strftime('%Y-%m-%d %H:%M:%S')
#print("今天是:",print_now)
#print("距离 2019-02-01 \"work\" 还剩下:%d天"%delta.days)
#print(delta.days,hour, minute, seconds)
ShowStr2("倒计时:%dH (%dMin)"%(hour,minute),width/4*2+width/32+20,height/5*3+height/30+235,45)##########################本地信息获取完成#######################################
#print ("↓:"+str("%3.1f"%(DownloadSpeed))+"MB/s")
#print ("↑:"+str("%3.1f"%(UploadSpeed))+"MB/s")
#print("CPU usage:"+str("%2d"%cpu_usage)+"%")
#########weather show####################################
if loop % 10800==0 : #update per 3 hours
jsonArr=weatherAPI.GetWeatherInfo()if jsonArr!=None : #记录请求数据时间
updatingtime=time.strftime("%H:%M:%S",mylocaltime)if jsonArr["status"]!="1":print (jsonArr["msg"])
WeatherValidation=Falseelse:
result=jsonArr["forecasts"][0]
WeatherValidation=True#print (result["city"],result["weather"],result["temp"],result["temphigh"],result["templow"])
if WeatherValidation==True:#AQI=result["aqi"]
#index=result["index"]
#index0=index[0]
#daily=result["daily"]
#day1=daily[1]#明天天气预报
#day2=daily[2]#明天天气预报
#day3=daily[3]#明天天气预报
#day4=daily[4]#明天天气预报
### #室外温湿度
#ShowPicture("pictures/"+result["img"]+".png",width/16,height/5+150)
ShowStr("武汉市",width/32,height/5+10,60)
ShowStr(result["city"],width/32,height/5+80,60)
ShowStr(result["casts"][0]["dayweather"],width/32-25,height/5*2+50,120)
ShowStr(result["casts"][0]["daytemp"]+"℃",width/4,height/5,160)
ShowStr("气温最低:"+result["casts"][0]["nighttemp"] +"℃",width/4-10,height/5*2-20,48)
ShowStr("接下来转:"+result["casts"][0]["nightweather"],width/4-10,height/5*2+50,48)#ShowStr("zhesgii",width/2+20,height/5+10,120)
ShowStr("风力:"+result["casts"][0]["daypower"]+"级",width/4-10,height/5*2+110,48)### #空气质量
#ShowStr("PM2.5:",width/2+280,height/5+120,32)
#ShowStr(AQI["pm2_5"],width/2+400,height/5-20,200)
#ShowStr("空气质量:"+AQI["quality"],width/2+240,height/5*2-40,32)
ShowPicture("pictures/"+result["casts"][0]["dayweather"]+".png",width/32+60,height/5+145)#if Title_X<=-100:
#Title_X=width
#else:
#Title_X=Title_X-40
#ShowStr(index0["detail"],Title_X,height-50,40)
##未来几天天气预报
ShowStr("明天:"+result["casts"][1]["date"],width/32,height/5*3+height/30-10,30)
ShowStr(result["casts"][1]["dayweather"],width/32,height/5*3+height/30+30,50)
ShowStr(result["casts"][2]["daytemp"]+"℃",width/32,height/5*3+height/30+80,70)
ShowStr("气温Min:"+result["casts"][1]["nighttemp"] +"℃",width/32-10,height/5*3+height/30+140,45)
ShowStr("未来转:"+result["casts"][1]["nightweather"],width/32-10,height/5*3+height/30+180,45)
ShowPicture("pictures/"+result["casts"][1]["dayweather"]+".png",width/32+170,height/5*3+height/30+45)#ShowPicture("pictures/"+day1["day"]["img"]+".png",width/32,height/5*3+height/10)
###
ShowStr("后天:"+result["casts"][2]["date"],width/4+width/32,height/5*3+height/30-10,30)
ShowStr(result["casts"][2]["dayweather"],width/4+width/32,height/5*3+height/30+30,50)
ShowStr(result["casts"][2]["daytemp"]+"℃",width/4+width/32,height/5*3+height/30+80,70)
ShowStr("气温Min:"+result["casts"][2]["nighttemp"] +"℃",width/4+width/32-10,height/5*3+height/30+140,45)
ShowStr("未来转:"+result["casts"][2]["nightweather"],width/4+width/32-10,height/5*3+height/30+180,45)
ShowPicture("pictures/"+result["casts"][2]["dayweather"]+".png",width/4+width/32+170,height/5*3+height/30+45)#ShowStr(day2["day"]["weather"],width/4+width/32,height/5*3+height/5-40,100)
#ShowStr(day2["day"]["windpower"],width/4+width/32+70,height/5*3+height/10,64)
#ShowStr(day2["night"]["templow"]+"~"+day2["day"]["temphigh"]+"℃",width/4+width/32,height-130,64)
#ShowPicture("pictures/"+day2["day"]["img"]+".png",width/4+width/32,height/5*3+height/10)
###
ShowStr("大后天:"+result["casts"][3]["date"],width/4*2+width/32-25,height/5*3+height/30-10,30)
ShowStr(result["casts"][3]["dayweather"],width/4*2+width/32-25,height/5*3+height/30+30,50)
ShowStr(result["casts"][3]["daytemp"]+"℃",width/4*2+width/32-25,height/5*3+height/30+80,70)
ShowStr("气温Min:"+result["casts"][3]["nighttemp"] +"℃",width/4*2+width/32-25,height/5*3+height/30+140,45)
ShowStr("未来转:"+result["casts"][3]["nightweather"],width/4*2+width/32-25,height/5*3+height/30+180,45)
ShowPicture("pictures/"+result["casts"][3]["dayweather"]+".png",width/4*2+width/32-25+170,height/5*3+height/30+45)#ShowStr(day3["day"]["weather"],width/4*2+width/32,height/5*3+height/5-40,100)
#ShowStr(day3["day"]["windpower"],width/4*2+width/32+70,height/5*3+height/10,64)
#ShowStr(day3["night"]["templow"]+"~"+day2["day"]["temphigh"]+"℃",width/4*2+width/32,height-130,64)
#ShowPicture("pictures/"+day3["day"]["img"]+".png",width/4*2+width/32,height/5*3+height/10)
###
ShowPicture("pictures/cj.png",width/4*3+width/32,height/5*3+height/30-15)#ShowStr(day4["day"]["weather"],width/4*3+width/32,height/5*3+height/5-40,100)
#ShowStr(day4["day"]["windpower"],width/4*3+width/32+70,height/5*3+height/10,64)
#ShowStr(day4["night"]["templow"]+"~"+day2["day"]["temphigh"]+"℃",width/4*3+width/32,height-130,64)
#ShowPicture("pictures/"+day4["day"]["img"]+".png",width/4*3+width/32,height/5*3+height/10)
##记录请求数据时间
ShowStr3("Last update:"+updatingtime,width/4*3+15,height/5*3,30)
ShowStr2("这里是滚动字幕显示区,加循环可实现动态效果",width/32-25,height/5*3+height/30+235,45)#update
pygame.display.update()
loop+=1
#全屏
#for event in pygame.event.get():
#if event.type==pygame.KEYDOWN:
#running=False
pygame.quit()