﻿#!/usr/local/bin/Python
# -*- coding: utf-8 -*-
"""Пример, демонстрирующий применение оболочки обратного вызова (callback shim)"""

import Tkinter
	
def doButton(buttonName):
        """Желаемый обратный вызов (callback). Мне потребуется оболочка обратного вызова (callback shim), 
        поскольку через параметр command элемента Button (кнопка) обратные вызовы никаких аргументов 
        получить не могут."""
        print buttonName, "pressed"
	
class SimpleCallback:
        """Создается оболочка обратного вызова (callback shim), основанная на коде, предложенном Скоттом Дэвидом Дэниелсом (Scott David Daniels), который может работать и с ключевыми словами-аргументами."""
        def __init__(self, callback, *firstArgs):
                self.__callback = callback
                self.__firstArgs = firstArgs
	
        def __call__(self, *args):
                return self.__callback (*(self.__firstArgs + args))
	
root = Tkinter.Tk()
	
buttonNames = ("Button 1", "Button 2", "Button 3")

for name in buttonNames:
        callback = SimpleCallback(doButton, name)
        Tkinter.Button(root, text=name, command=callback).pack()
	
root.mainloop()
