如何给Tkinter窗口小部件的command属性的可执行对象传递参数



#coding:gbk
import Tkinter
w=Tkinter.Tk()
def add(a,b):
print a+b
b=Tkinter.Button(text=u'相加',command=add(1,2))
b.pack()
w.mainloop()

command属性只能接受可执行对象,比如:command=add ,如果函数需要参数的话,你不能想当然的是:command=add(1,2) ,这样程序运行就不会是你想像的那样。程序会在你按下“相加”按钮这前把a+b的结果打印出来,而在你按下按钮的时候却什么也没做,因为command=add才是将可执行对象“add”赋予了属性command,而command=add(1,2)是将函数调用add(1,2)的执行结果赋予了属性command,而函数add并没有反回值。但是应该怎样给command属性的可执行对象传递参数呢?很简单,程序修改如下:

#coding:gbk
import Tkinter
w=Tkinter.Tk()
def add(a,b):
print a+b
b=Tkinter.Button(text=u'相加',command=lambda:add(1,2))
b.pack()
w.mainloop()

表达式lambda:add(1,2)反回一个匿名函数-一个可执行对象,而这个可执行对象执行的内容就是我们想要的 add(1,2)。

在python中使用中文



#coding:gbk
a=u'中华人民共和國' #字符串前面一定要加上字母u,不然会显示成乱码。
#最后一个字是繁体,其它都是简体。
import Tkinter
w=Tkinter.Tk()
b=Tkinter.Button(text=a,command=w.destroy)
b.pack()
w.mainloop()

运行结果如下:

下面是我从python documentation 中找到的资料
Codec | Aliases | Languages

代码 别名 语言
gb2312 chinese, csiso58gb231280, euc-cn, Simplified Chinese(简体中文)
euccn, eucgb2312-cn, gb2312-1980,
gb2312-80, iso-ir-58
gbk 936, cp936, ms936 Unified Chinese(统一的中文)

如果把上面的 #coding:gbk 改成 #coding:gb2312 程序运行就会出错,因为字符串a的最后一个字符是繁体字,其它都是简体中文。我们还可以使用Aliases里面的别名,比如 #coding:936 或 #coding:chinese(只能使用简体中文)。

以上只是我经过试验得出的结论,如果有错误欢迎指正。

晴 多云

  下午QQ上有位朋友跟我说他的游戏帐号被盗了,开始我问他有没有设置密码保护,他说没有,还问我有没有办法,我说没我办法。后来他怀疑是我盗了他的帐号,他说的话很不礼貌,实在是无法跟他说清,也不想跟这种人多讲什么,就把他列入了黑名单。可能是因为他用了我的记牌器才这样怀疑的,怀疑我的程序有问题。辛辛苦苦为大家做了那么多的免费记牌器,得不到大家的理解,还要被人无理的怀疑,想想真有点心酸。

制作Email Icon


2008-01-22 下午 06:49
2007-05-15 下午 09:54




打开上面的链接并在如上图中输入你的QQ号,就可以制作一个你的QQ的Email icon。你还可以输入其它的邮箱地址,下面是我做的几个Email icon:

牵手

2004年6月9日晚,我第一次牵你的手,也是第一次牵女孩子的手。

也许是我不够勇敢,也许是我不够浪漫,不知道你为什么要离开我,请相信我是爱你的。 最爱你的人是我,否则我怎会如此难过,你能感觉到吗?玮。我不需要任何安慰,只要你能回到我的身边

分手的前一天梦到你

你面无表情的站在那,我走过去在你的嘴唇吻了一下,你冷冰冰的没有任何反应,然后慢慢转过身去,头也不回的走开了,越走越远,渐渐模糊,直到再也看不见你...

父母的生日

爸妈只知道自己的农历生日,却从来不知道自己公历是哪一天出生的。今天在网易电子邮箱里面的个人助理“公历农历”工具里查到了,爸是公历1943年7月10日星期六(农历6月初9)出生,妈是公历1949年12月21日星期三(农历11月初2)出生。

超好笑的笑话(转贴)



美女作家请一风流编辑审稿。编辑斜看着美女笑曰:上半部较丰满,有两点很突出,可惜下半部有些毛躁,并有一个漏洞,水份太大。美女着急的问: 那怎么办? 编辑答曰: 日后再说!


某男拿女医生所开处方转了半天回来问:“13超到底在哪?”女医生笑曰:“不是13超,是B超。”男大怒曰:“靠!你的B分得也太开了!


晚饭后领导视察“江阴 毛纺织厂”,来到大门口霓虹灯的厂名前,不巧电路故障,第一个“江”字未亮,领导只能看到后五个字,于是关切地问厂长:原材料好搞嘛?


幼儿园小芳老师指着黑板上m、a、y、d、b几个拼音考考小朋友, 小朋友们用最标准的发音说:“摸-阿-姨-的-波


一女地下工作者被捕, 被逼写信引首长上钩,女地下工作者逼于无奈只有写, 写完后偷偷从私处拨了几根B毛夹在信中。首长看完信后, 拿着B毛闻一闻,瞅一瞅,苦思冥想,沉思片刻突然恍然大悟: 原来是阴谋(毛)!

中国足球队兵败后,“强力持久丸”厂商找了国家队一名队员L“X”做了一个广告。情节是:L“X”左手抱着一个足球,右手指着屏幕说:“谁能90多分钟不射?我能!”


某保 险 套的厂家看了“强力持久丸“的广告后,深受启发,于是从国家队里找了一群队员也做了一个广告。画面是:所有队员对着球门狂轰烂炸,广告语:“不管射多少次,射不进去就是射不进去!”


生产避孕药的厂家看了以后也想搭乘顺风车,可自己的药怎么着也是给女人用的,这可怎么办呢?!但是也难不倒他们,经过三天三夜的冥思苦想,终于找到了个办法:让一个在中超吹黑哨的裁判身穿黑衣,哨子一吹,手势一打,傲气凛然的说:“不管射进去多少,统统的不算!”


一游泳教练性格直爽,而且嗓门大。一日,他在商场看到一个女学员,于是大声说:你穿上衣服后,还真认不出!


新婚之夜过后,次日一大早,新娘痛苦地从洞房走出,一手扶着墙壁,一手捂着下身,大骂:骗子!真是个骗子!结婚前说有三十年的积蓄,我还以为是钱呢!


某晚,一裸男叫了一辆出租车,女司机目不转睛盯着看他。裸男大怒,吼道:你他妈没见过裸男呀!女司机也大怒:我看你他妈从哪儿掏钱!


工作搞不好的根本原因不外乎三个:一是没关系,象寡妇睡觉,上面没人;二是不稳定,象妓 女睡觉,上面老换人;三是不团结,象和老婆睡觉,自已人老搞自已人。


某日,一帅哥在公车上掏零钱交车费时不小心带出了一个保 险 套,掉在地板上。他面红耳赤,不知该不该拣起来。这时,只听到后面的MM说道:大哥,你二弟的工作服掉了

希腊神话中金牛座的来历


  有一天,天神宙斯在人间游荡,经过某个国家时,突然看见这个国家的公主非常美丽,让宙斯不知不觉中看得出了神,回到天上之后,仍然对这位美丽的公主念念不忘。

  而在这个公主所属的国家中,有一座很大很漂亮的牧场,里面有多到数不清的牛群在吃草、嬉戏,公主时常会来到这个牧场与这群可爱的牛群一起玩耍。

  就在一个风和日丽的早上,公主又依往例的出现在牧场,当她正在与牛群玩得不亦乐乎时,突然发现在牛群之中,有一只特别会唱歌的牛,它的歌声非常悦耳动听,有如天籁一般,吸引着公主不自觉的朝他走去。

  公主一看到这只牛,马上无法自拔的就爱上了他。因为他不仅歌声完美,就连外表也一样好的没话说。正当公主慢慢靠在牛的身上与他一起忘情的唱歌时,这只牛突然背起了公主朝着天空飞去。

  经过了很久的飞行,这只牛终於在一个美丽的土地上停了下来,然后摇身一变成为人,向公主表达其爱慕之意。原来这只牛就是天神宙斯的化身,因为天神宙斯无法抑制服对公主的日夜思念,决定来向公主表白。

  美丽公主於是接受了宙斯的爱,两人一起回到天上生活。而宙斯为纪念那表白的地方,就以公主的名字欧罗芭做为那块土地的名字。那土地正是今天的欧州大陆。金牛座的神话故事,是十二个星座的碓一描绘爱情的故事,打破了一般人认为金牛座缺乏浪漫的错误印象。

用python下载邮件附件

import poplib
import cStringIO
import email
import email.Header
import base64,osos.chdir('d:\\python')
#POP3取信
M = poplib.POP3('xxx.xxx.xxx)
M.user('xxxxxx')
M.pass_('xxxxxx')#打印有多少封信
numMessages = len(M.list()[1])
print 'num of messages', numMessages
for i in range(numMessages):
m = M.retr(i+1)

buf = cStringIO.StringIO()
for j in m[1]:
print >>buf, j
buf.seek(0)#解析信件内容
msg = email.message_from_file(buf)
for part in msg.walk():
contenttype = part.get('Content-Disposition')
filename=email.Header.decode_header(part.get_filename())
if filename and contenttype and contenttype[0:10]== 'attachment':
filename=os.path.basename(filename[0][0])
print contenttype[0:10],filename
f = open(filename,'wb')
f.write(part.get_payload(decode=True))
f.close()
M.quit()
print 'exit'