Мой первый вопрос здесь :), и, вероятно, простой для вас, ребята ... У меня проблема с изменением текста ярлыка при нажатии кнопки.Kivy - Текст ярлыка не меняется
Код приведен ниже. Я пробовал много вариантов on_press определения:
self.on_press=lambda:YellowLabel.change_text(YellowLabel)
self.on_press=lambda:YellowLabel.change_text
не работает
self.on_press=YellowLabel.change_text(YellowLabel)
возвращается:
KeyError: 'text'
Я предполагаю, что это, вероятно, из-за конфликта, потому что функция вызывается перед этикетки инициализируется. Когда я попытался
self.on_press=YellowLabel.change_text
возвращается:
TypeError: change_text() missing 1 required positional argument: 'self'
Я также пробовал много других вариантов, но я просто не могу получить его. И, функция печати внутри change_text работает в примере ниже, но текст метки не изменяется. Я также попытался поставить change_text вне класса YellowLabel, но все равно не повезло ...
Что я делаю неправильно? Теперь, я думаю, что, возможно, функция change_text не очень хорошая, но я не могу понять, почему ...
p.s. я пошёл по многим связанным с Киви вопросам на этом сайте и попробовал их, но я просто не могу заставить его работать.
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class RedButton(Button):
def __init__(self,txt="RED LABEL",**kwargs):
super(RedButton,self).__init__(txt="RED LABEL",**kwargs)
self.text=(txt)
self.color=[1,0,0,1]
self.on_press=lambda:YellowLabel.change_text(YellowLabel)
class YellowLabel(Label):
def __init__(self,**kwargs):
super(YellowLabel,self).__init__(**kwargs)
self.text=("yellow")
self.color=[1,1,0,1]
self.id="yelb"
def change_text(self):
print("printed")
self.text=("new yellow text")
class Window(BoxLayout):
def __init__(self,**kwargs):
super(Window,self).__init__(orientation="vertical",**kwargs)
self.add_widget(RedButton(txt="new red button"))
self.add_widget(YellowLabel())
class UpdateApp(App):
def build(self):
return Window()
if __name__=="__main__":
UpdateApp().run()
попробовать 'self.on_press = лямбда: YellowLabel.change_text() ' – ThePavolC
nope ... я получаю эту ошибку: ТипError: change_text() отсутствует 1 обязательный позиционный аргумент: 'self' – tomyslav
Я бы сказал, что проблема может заключаться в том, что здесь' self.on_press = lambda: YellowLabel .change_text (YellowLabel) 'вам не хватает ссылки на YellowLable, которую вы создали в окне' __init__'. Вы должны попытаться получить виджет YellowLable из объекта Window и вызвать 'change_text()' на том, что – ThePavolC