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'])