python+tkinter+动画图片+爬虫(查询天气)的GUI图形界面设计
1.完整代码:
- import time
- import urllib.request #发送网络请求,获取数据
- import gzip #压缩和解压缩模块
- import json #解析获得的数据
- from tkinter import *
- root1 = Tk() #用tkinter建立根窗口
- root1.title('天气查询xgj@V1.0')#窗口标题
- root1.geometry('1300x800+500+0') #注意x=是小写的字母x,不是乘号
- root1.configure(bg='black') #构建一个函数,bg=背景颜色设置
- Label(root1,text = '请输入要查询天气的城市:',font=10,bg='black',fg='purple').grid(row=0,column=0)#设置标签并调整位置
- enter = Entry(root1,font=10,fg='purple')#输入框设置,字体大小
- enter.grid(row = 0,column=1,padx = 20, pady = 20)#调整位置
- enter.insert(0,'北京')#设置默认文本,初始为北京
- def get_weather_data() :#爬虫部分:获取网站数据
- city_name = enter.get()#获取输入框的内容
- url1 = 'http://wthrcdn.etouch.cn/weather_mini?city='+urllib.parse.quote(city_name)
- weather_data = urllib.request.urlopen(url1).read() #读取网页数据
- weather_data = gzip.decompress(weather_data).decode('utf-8') #解码并解压网页数据
- weather_dict = json.loads(weather_data) #将json数据转换为dict数据
- #增加判断
- if weather_dict.get('desc') == 'invilad-citykey': #输入错误提示弹出框
- print(messagebox.askokcancel("提示","你输入的城市名有误,或者天气中心未收录你所在城市"))
- else:
- show_data(weather_dict,city_name) #如果正确,那就进入展示数据窗口和内容
- #定义展示数据窗口和内容设置
- def show_data(weather_dict,city_name):#显示数据窗口的设置
- forecast = weather_dict.get('data').get('forecast')#获取数据块
- root2=Tk()#弹出天气查询结果的窗口,第2个窗口
- root2.geometry('1500x500+500+0')#修改窗口大小
- root2.configure(bg='black')
- root2.title(city_name + '的未来5天的天气状况')#副窗口标题
- #设置日期列表
- for i in range(5):#将每一天的数据放入列表中 ,列表中5个数据
- LANGS = [(forecast[i].get('date'),'日期'),
- (forecast[i].get('fengxiang'),'风向'),
- (forecast[i].get('high'),'最高温'),
- (forecast[i].get('low'),'最低温'),
- (forecast[i].get('type'),'天气')]
- group = LabelFrame(root2,text = '天气状况',font=6,bg='black',fg='purple',padx = 0,pady = 0)#框架
- group.pack(padx=11,pady=0,side = LEFT)#放置框架
- for lang, value in LANGS:#将数据放入框架中
- c = Label(group,text = value + ': ' + lang,fg='green',font=8,bg='black')
- c.pack(anchor = W)
- #第2个窗口root2的标签和按钮设置
- Label(root2,font=10,text = '今日:' + weather_dict.get('data').get('ganmao'),
- fg = 'red',bg='black').place(x=40,y=20,height=40)#温馨提示
- Label(root2,text = "↑这是今天的天气",font=8,fg = "red",bg = "black").place(x=10,y=450,width=300,height=50)#作者网站
- Button(root2,text = '确认并退出',font=10,fg = "purple",bg = "black",command = root2.quit).place(x=1200,y=450,width = 200,height=50)#退出按钮
- root2.mainloop()
- #主界面:第1个窗口的按钮设置布置按键
- Button(root1, text = "确认",width=10,font=10,bg='black',fg='purple',command = get_weather_data)\
- .grid(row = 3, column=0,sticky = W, padx = 10, pady = 5)
- Button(root1, text = '退出',width=10,font=10,bg='black',fg='purple',command = root1.quit)\
- .grid(row = 3, column = 1, sticky = E, padx = 10, pady = 5)
- # 配置,放在这里,那么主窗口的2个按钮就先显示出来
- # 要打开的图像
- image1 = "open.gif" #注意tkinter中需要gif格式的图片,默认目录下
- image2 = "welcome.gif" #也可以单独设置目录或者路径
- #python3的特性,一行依次赋值
- x0, y0=50.0,50.0 # 初始坐标
- x,y=[x0],[y0] # 列表将包含所有的x和y坐标.到目前为止,他们只包含初始坐标
- vx,vy=1.0,0.5 # 每次移动的速度或距离
- # 边界,这里要考虑到图片的大小,要预留一半的长和宽
- x_min,y_min,x_max,y_max=46.0,46.0,754.0,554.0
- range_min,range_max=1,2000 # 运行步数
- # 创建500次的x和y坐标
- for t in range(range_min, range_max):
- # 新坐标等于旧坐标加每次移动的距离
- new_x = x[t - 1] + vx
- new_y = y[t - 1] + vy
- # 如果已经越过边界,反转方向
- if new_x >= x_max or new_x <= x_min:
- vx = vx * -1.0
- if new_y >= y_max or new_y <= y_min:
- vy = vy * -1.0
- # 添加新的值到列表
- x.append(new_x)
- y.append(new_y)
- canvas = Canvas(root1,width=800, height=600, bg='white')
- canvas.grid(row = 2,column=0)#调整位置
- photo1 = PhotoImage(file=image1)
- photo2 = PhotoImage(file=image2) #add
- width1 = photo1.width()
- height1 = photo1.height()
- image_x = (width1) / 2.0
- image_y = (height1) / 2.0
- # 每次的移动
- for t in range(range_min, range_max):
- canvas.create_image(x[t], y[t], image=photo1, tag="pic") #tag是这张图片的标签,这里需要
- canvas.update()
- # 暂停多少秒,然后删除图像
- time.sleep(0.001) #1秒,缓慢;如果0.025s等于每秒40帧;0.001s很快
- canvas.delete("pic") #因为这里需要删除它
- #等上面动画结束后,再出现这个图片
- canvas.create_image(400, 300, image=photo2) #这里不需要tag
- canvas.update()
- #主窗口循环走起
- root1.mainloop()
2. 图片可自定义:注意是gif格式。
python+tkinter+动画图片+爬虫(查询天气)的GUI图形界面设计的更多相关文章
- python的re模块一些方法 && Tkinter图形界面设计 && 终止python运行函数 && python读写文件 && python一旦给字符串赋值就不能单独改变某个字符,除非重新给变量赋值
Tkinter图形界面设计见:https://www.cnblogs.com/pywjh/p/9527828.html#radiobutton 终止python运行函数: 采用sys.exit(0)正 ...
- Tkinter图形界面设计(GUI)
[因为这是我第一个接触的GUI图形界面python库,现在也不用了,所以大多数内容都来自之前花 钱买的一些快速入门的内容,可以当作简单的知识点查询使用] 在此声明:内容来自微信公众号GitChat,付 ...
- 简单的爬虫程序以及使用PYQT进行界面设计(包含源码解析)
由于这个是毕业设计的内容,而且还是跨专业的.爬虫程序肯定是很简单的,就是调用Yahoo的API进行爬取图片.这篇博客主要讲的是基础的界面设计. 放上源码,然后分部解析一下重要的地方.注:flickra ...
- PyQt(Python+Qt)实现的GUI图形界面应用程序的事件捕获方法大全及对比分析
一. 概述 PyQt的图形界面应用中,事件处理类似于Windows系统的消息处理.一个带图形界面的应用程序启动后,事件处理就是应用的主循环,事件处理负责接收事件.分发事件.接收应用处理事件的返回结果, ...
- python 斗图图片爬虫
捣鼓了三小时,有一些小Bug,望大佬指导 废话不说,直接上代码: #!/usr/bin/python3 # -*- coding:UTF-8 -*- import os,re,requests fro ...
- Python tkinter库将matplotlib图表显示在GUI窗口上,并实时更新刷新数据
代码 1 ''' 2 使用matplotlib创建图表,并显示在tk窗口 3 ''' 4 import matplotlib.pyplot as plt 5 from matplotlib.pylab ...
- 【Python】:简单爬虫作业
使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...
- python Tkinter 编程
Tkinter 是 Python 的标准 GUI 库.Python 使用 Tkinter 可以快速的创建 GUI 应用程序. 由于 Tkinter 是内置到 python 的安装包中.只要安装好 Py ...
- PyQt(Python+Qt)学习随笔:print标准输出sys.stdout以及stderr重定向QTextBrowser等图形界面对象
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 <在Python实现print标准输出sys.stdout.st ...
随机推荐
- ORACLE不常用但实用的技巧- 树查询 level用法
树查询 使用树查询的前提条件是: 在一条记录中记录了当前节点的ID和这个节点的父ID. 注意:一旦数据中出现了循环记录,如两个节点互为对方的父结点,系统就会报 ORA-01436错误(ORA-0143 ...
- H3C端口隔离
一.端口隔离简介 为了实现端口间的二层隔离,可以将不同的端口加入不同的VLAN,但VLAN资源有限.采用端口隔离特性,用户只需要将端口加入到隔离组中,就可以实现隔离组内端口之间二层隔离,而不关心这些端 ...
- 阿里云部署JeecgBoot
阿里云部署JeecgBoot 首先贴出官网教程:http://jeecg-boot.mydoc.io/?t=345682 自己在部署的时候遇到了各种各样的问题,其实一步一步的按照官网给出的步骤来是没问 ...
- centos7搭建zabbix
参考:https://blog.csdn.net/xiaocong66666/article/details/82818893 安装所需的依赖包即可: yum install gcc gcc-c++ ...
- Java连载84-Collection的常用方法、迭代器
一.Collections的常用方法介绍 1.承接上次连载,先介绍几个简单的常用方法 package com.bjpowernode.java_learning; import java.util.* ...
- 详解C/C++中的的:#pragma pack(push) 、#pragma pack(pop) 和#pragma pack()
前言 我们知道结构体内存对齐字节可以通过#pragma pack(n) 的方式来指定. 但是,有没有想过一个问题,某些时候我想4字节对齐,有些时候我又想1字节或者8字节对齐,那么怎么解决这个问题呢? ...
- python面试的100题(16)
Python高级 元类 42.Python中类方法.类实例方法.静态方法有何区别? 类方法: 是类对象的方法,在定义时需要在上方使用 @classmethod 进行装饰,形参为cls,表示类对象,类对 ...
- 洛谷P1583 魔法照片
https://www.luogu.org/problem/P1583 话不多说,其实就是模拟,然后,各种繁琐 #include<bits/stdc++.h> using namespac ...
- 创建pod失败分析
- 查看war包编译时使用的jdk版本
第一种方式:找到war包的其中一个class文件,用UE打开,看第一行 34(对应十进制的50):JDK1.8 33(对应十进制的50):JDK1.7 32(对应十进制的50):JDK1.6 31(对 ...