Enaml получает аргументы в обработчике событий

Я проектирую пользовательский интерфейс с Enaml на Python. У меня есть пользовательский элемент управления, содержащий, скажем, две кнопки. Каждый раз, когда нажимается любая из двух кнопок, одна из которых 1, а другая с идентификатором 2, я хочу, чтобы родительский контейнер имел представление о том, какая из них нажата. Таким образом, обработчик события от родителя принимает дополнительный параметр, различающий источник события. Вот мой код

from enaml.widgets.api import (
    Window, Container, PushButton
)

enamldef TwoButtons(Container):  
    attr cont
    PushButton:        
        text = 'Button1'
        clicked :: cont.clicked(1)

    PushButton:
        text = 'Button2'
        clicked :: cont.clicked(2)


enamldef Main(Window):
    Container:
        attr buttonId
        event clicked

        TwoButtons:
            cont = parent

        clicked ::
            # A way to read the event handler argument goes here
            print "Someone is clicked, don't know who :("

Какие-либо предложения?

Спасибо и всего наилучшего!

1 ответ

Решение

Получил некоторые подсказки от моего коллеги. Мы можем использовать встроенный change словарь для отслеживания события.

Полный список кодов:

from enaml.widgets.api import (
    Window, Container, PushButton)

enamldef TwoButtons(Container):  
    attr cont
    PushButton:        
        text = 'Button1'
        clicked :: cont.clicked(1)

    PushButton:
        text = 'Button2'
        clicked :: cont.clicked(2)


enamldef Main(Window):
    Container:
        attr buttonId
        event clicked

        TwoButtons:
            cont = parent

        clicked ::
            print change.get('value')
            print "I know it's you {i:s}".format(s=change['value'])
Другие вопросы по тегам