Как изменить элемент Label по id?
Нужно чтобы каждая кнопка меняла label под ней по id, как это реализовать?
from kivy.app import App
from kivy.app import runTouchApp
from kivy.uix.togglebutton import ToggleButton
from kivy.core.window import Window
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
class MyApp(App):
def build(self):
self.gl=GridLayout(rows=20, cols=0, id='0')
i=0
while i < 10:
self.btn = ToggleButton(text='Кнопка '+str(i),color=[0,0,0,1], id=str(i), group=i, on_press=self.pressed_btn, background_color=[1,1,1,1], background_normal='')
self.gl.add_widget(self.btn)
self.gl.add_widget(Label(text='Текст', id=str(i)))
i+=1
root = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
root.add_widget(self.gl)
runTouchApp(root)
def pressed_btn(self, instance_toggle_button):
if instance_toggle_button.state=='down':
instance_toggle_button.background_color=[.40,.40,.40,1]
instance_toggle_button.background_down=('')
MyApp().run()
Ответы (1 шт):
Автор решения: Xyanight
→ Ссылка
from kivy.app import App
from kivy.metrics import dp
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
class MyApp(App):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.gl = GridLayout(rows=20, cols=1, size_hint_y=None)
self.gl.bind(minimum_height=self.gl.setter("height"))
self.root = ScrollView()
self.root.add_widget(self.gl)
def build(self):
for i in range(10):
btn = ToggleButton(
text="Кнопка " + str(i),
color=[0, 0, 0, 1],
group=i,
background_color=[1, 1, 1, 1],
background_normal="",
size_hint_y=None,
height=dp(36),
)
lbl = Label(text="Текст", size_hint_y=None, height=dp(36))
self.gl.add_widget(btn)
self.gl.add_widget(lbl)
btn.bind(on_press=lambda args, x=lbl, y=btn: self.pressed_btn(x, y))
return self.root
def pressed_btn(self, lbl, btn):
lbl.text = f"{lbl.text} {btn.text}"
MyApp().run()