76-闭包的用法

下面的代码用到了《66-偏函数应用:简单的图形窗口》
图形窗口上的按钮有个command选项,其实它就是一个函数。如下:

import tkinter
from functools import partial

def hello():
    lb.config(text="Hello China!")

def welcome():
    lb.config(text="Hello Tedu!")

root = tkinter.Tk()
lb = tkinter.Label(text="Hello world!", font="Times 26")
MyBtn = partial(tkinter.Button, root, fg='white', bg='blue')
b1 = MyBtn(text='Button 1', command=hello)
b2 = MyBtn(text='Button 2', command=welcome)
b3 = MyBtn(text='quit', command=root.quit)
lb.pack()
b1.pack()
b2.pack()
b3.pack()
root.mainloop()

按下Button 1和Button 2就会执行hello和welcome两个函数。这两个函数非常类似,如果有10个按钮,并且都是类似的呢?
换成内部函数、闭包的的语法如下:

import tkinter
from functools import partial

def hello(word):
    def welcome():
        lb.config(text="Hello %s!" % word)
    return welcome  # hello函数的返回值还是函数

root = tkinter.Tk()
lb = tkinter.Label(text="Hello world!", font="Times 26")
MyBtn = partial(tkinter.Button, root, fg='white', bg='blue')
b1 = MyBtn(text='Button 1', command=hello('China'))
b2 = MyBtn(text='Button 2', command=hello('Tedu'))
b3 = MyBtn(text='quit', command=root.quit)
lb.pack()
b1.pack()
b2.pack()
b3.pack()
root.mainloop()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,009评论 3 119
  • 我是真的不了解我自己,我是對美好愛情有所向往,但我卻好像根本搞不懂它,我所有對愛情的了解僅僅是各種文學作品,總是希...
    葉月抹茶阅读 234评论 0 0
  • 今天学习到了一个新单词,millennials,意为“千禧一代”。好奇何为千禧一代,便查了百度百科,一边看,一边情...
    星零溡空阅读 446评论 0 0
  • 阶级以及阶级间性首先是一种历史的经济关系。性别的经验是在经过命名后才被意识到,所以在这之前并非必要区分生理的或者社...
    Marges阅读 830评论 0 0
  • 一、廿年若梦,饮水思源,母校璀璨,新貌如歌 南京,六朝古都,中国四大古都之一,江苏省省会,首批国家历史文化名城,中...
    梧桐曾曾M阅读 1,778评论 0 1