Никогда не работал с этим фреймворком, но есть подозрение.
a.on_selection = self.selected(a.selection)
ты присваиваешь свойству on_selection
возвращаемое значение метода selected(). Так как метод ничего не возвращает, это None. Т.е. ты говоришь, что никакой реакции на on_selection не надо делать.
Подозреваю, что правильно будет
a.on_selection = self.selected
и обрати внимание, что нет скобок! Вместо вызова метода мы передаём ссылку на него.
Далее, можно было бы и самостоятельно догадаться в чём дело, но тебя сбило с толку вот эта "обработка" исключений:
try:
self.ids.my_image.source = filename[0]
except:
pass
Возьми хорошую железную линейку, и пару раз врежь себе по пальцам, чтобы запомнить что так делать не стоит никогда. Теперь вместо сколь-нибудь вменяемого сообщения об ошибке, по которому можно докопаться до её первопричины, программа просто молча не работает.