Я столкнулся с ошибкой при попытке получить доступ к двум кнопкам из группы кнопок, созданной в цикле for и привязав кнопку к on_press. Пожалуйста, как правильно это сделать (без .kv). Как я могу получить доступ к отдельной кнопке и привязать их к другому событию on_press
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
class TestApp(App):
def build(self):
layout=GridLayout(cols=1)
for i in range(6):
btn = Button(text= str(i))
layout.add_widget(btn)
# error occurred here
btn[0].bind(on_press=first)
btn[1].bind(on_press=second)
def first(self):
pass
def second(self):
pass
return layout
if __name__ == '__main__':
TestApp().run()
2 ответа
Код, включающий btn[0]
, подразумевает список btn
, но в вашем коде такого списка нет. Вот модифицированная версия вашего кода, которая делает то, что вы хотите:
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
class TestApp(App):
def build(self):
layout=GridLayout(cols=1)
for i in range(6):
btn = Button(text= str(i))
layout.add_widget(btn)
if i == 0:
btn.bind(on_press=self.first)
elif i == 1:
btn.bind(on_press=self.second)
return layout
def first(self, button_instance):
print('first')
def second(self, button_instance):
print('second')
if __name__ == '__main__':
TestApp().run()
Я все еще не решил полностью свою проблему, однако следующий код вернул объект, созданный на кнопке, и присвоенное ему значение. Поэтому я считаю, что это решение может вам помочь.
from functools import partial
for x in test:
btn = Button(text=x["CustomerName"], background_color=[0.9, 0.9, 0.9, 0.9], size_hint_y=None, height=40)
btn.bind(on_press=partial(self.mostra,x["CustomerName"]))
self.ids.grd1.add_widget(btn)
def mostra(self,*args):
print(args)
Глядя на опубликованный мной код, я использовал bind после создания кнопки (btn.bind
), и в нем я передал функцию, которая показывает на экране значение, сохраненное в x моего цикла. В функции (mostra
) использование self
и * args
обязательно.
В начале есть строка (from functools import partial
), которая необходима для выполнения функции show внутри привязки.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.