Сначала вы должны понять, что идентификатор должен иметь локальную область видимости, и вы не должны использовать его вне его.Таким образом, идентификатор toggle_buttons должен использоваться только в реализации TButton.
С вашей логикой, скажем, вы хотите сбросить только одну кнопку через этот идентификатор, как мне идентифицировать эту кнопку, если они имеют одинаковый идентификатор?как мы видим, это невозможно.
Решение состоит в том, чтобы реализовать свойство, которое хранит идентификаторы кнопок и выполняет итерации, устанавливая свойство.
ScreenManager:
buttons: [btn1, btn2] # <---
Screen:
name: 'screen'
GridLayout:
cols:1
rows:3
TButton:
id: btn1
TButton:
id: btn2
Button:
text:
'Reset button'
on_release: for btn in root.buttons: btn.state = 'normal'
<TButton@ToggleButton>:
id: toggle_buttons
allow_no_selection: True
text: 'Toggle Button'