Python Tkinter小试
前两天看到一篇关于Python使用Tkinter 的博文,写的很好。就拿来研究了一下,改了改。现分享如下:
参考
代码
# coding:utf8
# python2.73 winxp
'''''
天气插件: 使用json接受中气象的本地信息,显示使用tkinter
url http://www.weather.com.cn/data/sk/101221201.html
v0.1
'''
from Tkinter import *
import json
import urllib
import time
def getWeaInfo():
url = r'http://www.weather.com.cn/data/cityinfo/101221201.html'
res = urllib.urlopen(url) # 返回的是个json样式的字符串
weatherinfo = {}
jinfo = res.read().decode('utf8') # jinfo是一个unicode对象,而我们要的是一个json,然后解析
info = json.loads(jinfo) # 变成键值对
if info:
try:
weatherinfo['city'] = info['weatherinfo']['city'] # 城市
weatherinfo['tempH'] = info['weatherinfo']['temp1'] # 高温
weatherinfo['tempL'] = info['weatherinfo']['temp2'] # 低温
weatherinfo['weather'] = info['weatherinfo']['weather'] # 天气
weatherinfo['ptime'] = info['weatherinfo']['ptime'] # 发布时间
except KeyError, e:
print 'Do not get the key', e.message
return weatherinfo
class WeatherFrame:
'''''
用于显示主框架
'''
def __init__(self):
self.root = Tk()
# 一个标题
self.title = Label(self.root, text=u'天气情况')
self.title.pack(side=TOP)
# 四对信息框
self.fm1 = Frame(self.root)
self.label_city = Label(self.fm1, text=u'城市')
self.label_city.pack(side=LEFT, expand=YES)
self.text_city_e = StringVar()
self.text_city = Entry(self.fm1, text='', state='readonly', textvariable=self.text_city_e)
self.text_city.pack(side=LEFT, expand=YES)
self.fm1.pack(side=TOP)
self.fm2 = Frame(self.root)
self.label_temph = Label(self.fm2, text=u'高温')
self.label_temph.pack(side=LEFT, expand=YES)
self.text_temph_e = StringVar()
self.text_temph = Entry(self.fm2, text='', state='readonly', textvariable=self.text_temph_e)
self.text_temph.pack(side=LEFT, expand=YES)
self.fm2.pack(side=TOP)
self.fm3 = Frame(self.root)
self.label_templ = Label(self.fm3, text=u'低温')
self.label_templ.pack(side=LEFT, expand=YES)
self.text_templ_e = StringVar()
self.text_templ = Entry(self.fm3, text='', state='readonly', textvariable=self.text_templ_e)
self.text_templ.pack(side=LEFT, expand=YES)
self.fm3.pack(side=TOP)
self.fm4 = Frame(self.root)
self.label_weather = Label(self.fm4, text=u'天气')
self.label_weather.pack(side=LEFT, expand=YES)
self.text_weather_e = StringVar()
self.text_weather = Entry(self.fm4, text='', state='readonly', textvariable=self.text_weather_e)
self.text_weather.pack(side=LEFT, expand=YES)
self.fm4.pack(side=TOP)
# 两个操作按钮
self.fm5 = Frame(self.root)
self.button_pull = Button(self.fm5, text=u'获取', command=self.pullWeaInfo)
self.button_pull.pack(side=LEFT, expand=YES)
self.button_quit = Button(self.fm5, text=u'退出', command=self.root.quit)
self.button_quit.pack(side=LEFT, expand=YES)
self.fm5.pack(side=TOP)
self.pullWeaInfo()
def pullWeaInfo(self):
# 推送天气信息,初始化推送,手动更新
weainfo = getWeaInfo()
self.text_city_e.set(weainfo['city'])
self.text_temph_e.set(weainfo['tempH'])
self.text_templ_e.set(weainfo['tempL'])
self.text_weather_e.set(weainfo['weather'])
print ('lastest updated time is %s' % time.ctime())
if __name__ == '__main__':
wf = WeatherFrame()
mainloop()
效果
我的修改
中国城市代码
代码
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# __author__ = '郭 璞'
# __date__ = '2016/8/26'
# __Desc__ = 天气预报小案例
from Tkinter import *
import urllib2
import json
def getWeatherInfoByCityCode(citycode):
url = r'http://www.weather.com.cn/data/cityinfo/'+str(citycode)+'.html'
data = urllib2.urlopen(url).read().decode('utf8')
json_info = json.loads(data)
weatherinfo = {}
weatherinfo['city'] = json_info['weatherinfo']['city'] # 城市
weatherinfo['tempH'] = json_info['weatherinfo']['temp2'] # 高温
weatherinfo['tempL'] = json_info['weatherinfo']['temp1'] # 低温
weatherinfo['weather'] = json_info['weatherinfo']['weather'] # 天气
weatherinfo['ptime'] = json_info['weatherinfo']['ptime'] # 发布时间
return weatherinfo
def show_in_tkinter(ccode):
tk = Tk()
citycode = StringVar()
citycode.set(ccode)
weatherinfo = getWeatherInfoByCityCode(citycode.get())
frame1 = Frame(tk)
Label(frame1,text='输入城市代码').pack(side=LEFT,expand=YES)
Entry(frame1,textvariable=citycode).pack()
frame1.pack(side=TOP)
frame2 = Frame(tk)
Label(frame2, text='城市名称').pack(side=LEFT, expand=YES)
cityname = '%s'%weatherinfo['city']
str_v_cityname = StringVar()
str_v_cityname.set(cityname)
Entry(frame2, textvariable=str_v_cityname,state='readonly').pack()
frame2.pack(side=TOP)
frame3 = Frame(tk)
Label(frame3, text=' 高温').pack(side=LEFT, expand=YES)
temp_h = '%s' % weatherinfo['tempH']
str_v_temp_h = StringVar()
str_v_temp_h.set(temp_h)
Entry(frame3, textvariable=str_v_temp_h, state='readonly').pack()
frame3.pack(side=TOP)
frame4 = Frame(tk)
Label(frame4, text=' 低温').pack(side=LEFT, expand=YES)
temp_l = '%s' % weatherinfo['tempL']
str_v_temp_l = StringVar()
str_v_temp_l.set(temp_l)
Entry(frame4, textvariable=str_v_temp_l, state='readonly').pack()
frame4.pack(side=TOP)
frame5 = Frame(tk)
Label(frame5, text=' 天气').pack(side=LEFT, expand=YES)
weather = '%s' % weatherinfo['weather']
str_v_weather = StringVar()
str_v_weather.set(weather)
Entry(frame5, textvariable=str_v_weather, state='readonly').pack()
frame5.pack(side=TOP)
frame6 = Frame(tk)
Label(frame6, text='更新时间').pack(side=LEFT, expand=YES)
updatetime = '%s' % weatherinfo['ptime']
str_v_updatetime = StringVar()
str_v_updatetime.set(updatetime)
Entry(frame6, textvariable=str_v_updatetime, state='readonly').pack()
frame6.pack(side=TOP)
frame7 = Frame(tk)
btn_pull = Button(frame7,text='获取数据',command=lambda:show_in_tkinter(citycode.get()))
print citycode.get()
# btn_pull.bind(citycode.get(),update_weather)
btn_pull.pack(side=LEFT, expand=YES)
btn_quit = Button(frame7,text='退出',command=tk.quit).pack(side=LEFT, expand=YES)
frame7.pack(side=TOP)
tk.mainloop()
if __name__=="__main__":
show_in_tkinter(101180308)
测试结果
不足之处
本来设计的是可以输入城市代码,来实时的获取对应的天气信息,并更新到界面上的,但是不知道为什么系统会默认新开一个Tkinter的界面,导致刷新失败!
有时间再来更新本文,打个时间戳:2016年8月26日22:50:14
Python Tkinter小试的更多相关文章
- Python Tkinter基础控件入门实例
分享一个Python Tkinter基础控件用法的入门例子,包括窗口的显示.显示内置图片.弹出窗口.菜单等. 例子,Python Tkinter基础控件的用法 # -*- coding: utf-8 ...
- Python Tkinter 学习成果:点歌软件music
笔者工作业余时间也没什么爱好,社交圈子也小,主要娱乐就是背着自己带电瓶的卖唱音响到住地附近找个人多的位置唱唱KtV. 硬件上点歌就用笔记本电脑,歌曲都是网上下载的mkv格式的含有两个音轨的视频.因此点 ...
- Python Tkinter Entry(文本框)
Python学习记录--关于Tkinter Entry(文本框)的选项.方法说明,以及一些示例. 属性(Options) background(bg) borderwidth(bd) cursor e ...
- python tkinter Listbox用法
python tkinter组件的Listbox的用法,见下面代码的演示: from tkinter import * root=Tk() v=StringVar() #Listbox与变量绑定' l ...
- python Tkinter之Button
Button小部件是一个标准的Tkinter的部件,用于实现各种按钮.按钮可以包含文本或图像,您可以调用Python函数或方法用于每个按钮. Tkinter的按钮被按下时,会自动调用该函数或方法. 该 ...
- python gui tkinter快速入门教程 | python tkinter tutorial
本文首发于个人博客https://kezunlin.me/post/d5c57f56/,欢迎阅读最新内容! python tkinter tutorial Guide main ui messageb ...
- Python tkinter模块弹出窗口及传值回到主窗口操作详解
这篇文章主要介绍了Python tkinter模块弹出窗口及传值回到主窗口操作,结合实例形式分析了Python使用tkinter模块实现的弹出窗口及参数传递相关操作技巧,需要的朋友可以参考下 本文实例 ...
- Python Tkinter 文本框(Entry)
Python Tkinter 文本框用来让用户输入一行文本字符串. 你如果需要输入多行文本,可以使用 Text 组件. 你如果需要显示一行或多行文本且不允许用户修改,你可以使用 Label 组件. 语 ...
- Python Tkinter 窗口创建与布局
做界面,首先需要创建一个窗口,Python Tkinter创建窗口很简单:(注意,Tkinter的包名因Python的版本不同存在差异,有两种:Tkinter和tkinter,读者若发现程序不能运行, ...
随机推荐
- oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)
1. 简介 Oracle Database11gR1引进了SQL PlanManagement(简称SPM),一套允许DBA捕获和保持任意SQL语句执行计划最优的新工具,这样,限制了刷新优化器统计 ...
- How to preview html file in our browser at sublime text?
sublime preview html.md open In Browser what should we do if we want to preview html file in our bro ...
- [LeetCode] K Empty Slots K个空槽
There is a garden with N slots. In each slot, there is a flower. The N flowers will bloom one by one ...
- react源代码重点难点分析
网上已经有不少react源码分析文档,但都是分析主流程和主要功能函数,没有一个是从reactDOM.render()入口开始分析源码把流程走通尤其是把复杂重要的细节环节走通直到把组件template编 ...
- 线性结构与树形结构相互转换(ES6实现)
前言 当树形结构的层级越来越深时,操作某一节点会变得越来越费劲,维护成本不断增加.所以线性结构与树形的相互转换变得异常重要! 首先,我们约定树形结构如下: node = { id: number, / ...
- [COGS 2524]__完全平方数
Description 一个数如果是另一个整数的完全平方,那么我们就称这个数为完全平方数(Pefect Sqaure),也称平方数.小A认为所有的平方数都是很perfect的~ 于是他给了小B一个任务 ...
- [测试题]神在夏至祭降下了神谕(oracle)
Description 我们村子在过去的 400 年中, 断绝与下界的接触, 过着自给自足的生活.夏至祭是一场迎接祖灵于夏季归来, 同时祈求丰收的庆典.村里的男人会在广场上演出夏之军和冬之军的战争. ...
- [USACO 08JAN]Haybale Guessing
Description The cows, who always have an inferiority complex about their intelligence, have a new gu ...
- 洛谷P1397 [NOI2013]矩阵游戏
矩阵快速幂+费马小定理 矩阵也是可以跑费马小定理的,但是要注意这个: (图是盗来的QAQ) 就是说如果矩阵a[i][i]都是相等的,那么就是mod p 而不是mod p-1了 #include< ...
- hdu 5052 树链剖分
Yaoge’s maximum profit Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...