Последние полчаса я читал о различных способах создания обратных вызовов в Python, и я не смог успешно передать параметр по умолчанию, который будет включен, когда он «возвращается».
Код нижедемонстрирует, что я хотел бы, чтобы целое число 5 было включено при выполнении обратного вызова через выход из графического интерфейса Tkinter.
class Heatmap(Updater):
""" Displays the Heatmap provided the data streaming in. """
def __init__(self, data_queue, slider_callback, closed_callback):
"""
Initialization function for the Osc heatmap.
:param data_queue: Data streamed in from the buffer for visualization.
:type data_queue: Queue
:param closed_callback: When the figure is closed, callback should be used to remove the figure.
:type closed_callback: Function
:param slider_callback: Callback function to return the state of the slider to parent caller.
:type slider_callback: Function
"""
super(Heatmap, self).__init__()
self.data_queue = data_queue
self.closed_callback = closed_callback
self.slider_callback = slider_callback
self.window = Tk()
#self.window.protocol('WM_DELETE_WINDOW', closed_callback)
atexit.register(self.closed_callback)
...
if __name__ == '__main__':
q = Queue()
for i in xrange(100):
q.put(i)
def close_cb(idx):
print 'idx {} window has been closed'.format(idx)
def slider_cb(val):
print 'slidy {}'.format(val)
closely = lambda x: close_cb(5)
hm = Heatmap(q, slider_cb, closely)
hm.run()
ERROR
TypeError: <lambda>() takes exactly 1 argument (0 given)
Я вижу, что ошибка указывает на мой atexit.register (self.closed_callback), так какожидать, что какой-то аргумент будет передан? Как бы я мог удовлетворить это, не передавая информацию об ошибках, при этом поддерживая тот факт, что я получаю 5 при успешном обратном вызове на выход.
Я также играл с functools.partial.