偏函数应用举例:路灯指示牌
1 1 #!/usr/bin/env python 2 2 # _*_coding:utf-8_*_ 3 3 # 红绿灯练习:按照指示类型创建适当当景、背景色的路灯指示牌 4 4 from functools import partial as pto 5 5 from tkinter import Tk, Button,X 6 6 from tkinter.messagebox import showinfo,showwarning,showerror 7 7 WARN = 'warn' 8 8 CRIT = 'crit' 9 9 REGU = 'regu' 1010 1111 SIGNS = { 1212 'do not enter':CRIT, 1313 'railroad crossing':WARN, 1414 '55\nspeed limit':REGU, 1515 'wrong way': CRIT, 1616 'merging traffic': WARN, 1717 'one way': REGU, 1818 } 1919 2020 critCB = lambda: showerror('Error','Error Button Pressed!') 2121 warnCB = lambda: showwarning('Warning','Warning Button Pressed!') 2222 infoCB = lambda: showinfo('Info','Info Button Pressed!') 2323 2424 2525 root = Tk() 2626 root.geometry('800x400') 2727 root.title('Road Signs') 2828 Button(root,text='QUIT',command=root.quit,bg='red',fg='white').pack() 2929 3030 3131 MyButton = pto(Button,root) 3232 CritButton = pto(MyButton,command=critCB,bg='white',fg='red') 3333 WarnButton = pto(MyButton,command = warnCB,bg = 'goldenrod1') 3434 ReguButton = pto(MyButton,command = infoCB,bg = 'white') 3535 3636 for eachSign in SIGNS: 3737 signType = SIGNS[eachSign] 3838 cmd = '%sButton(text = %r%s).pack(fill = X,expand = True)' %( 3939 signType.title(),eachSign,'.upper()' if signType == CRIT else '.title()' 4040 ) 4141 eval(cmd) 4242 4343 root.mainloop()