Как мне изменить текст кнопки на другом экране в kivy (без kv lang)

#python #kivy #kivy-language

#питон #kivy #kivy-язык

Вопрос:

Я хочу изменить текст кнопки на другом экране, но я не использую язык kv, как я могу это сделать? Вот пример кода

 from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

list=['Yes','No']


class ScreenManagement(ScreenManager):
    def __init__(self, **kwargs):
        super(ScreenManagement, self).__init__(**kwargs)


class Iniciar(Screen):
    def __init__(self, **kwargs):
        super(Iniciar, self).__init__(**kwargs)
        self.btn = Button(text='INICIAR', size_hint=(.2, .1), pos_hint={'center_x': .5, 'y': .05}, background_color=(0, 0, 1.60, 1),font_size=24, color=(.8, .9, 0, 1))
        self.btn.bind(on_press=self.press_button)
        self.add_widget(self.btn)

    def press_button(self, *args):
        list[0] = 'Apple'
        list[1] = 'Banana'
        self.manager.current = 'categorical'


class Categorical(Screen):
    def __init__(self, **kwargs):
        super(Categorical, self).__init__(**kwargs)
        self.button_1 = Button(text=list[0], size_hint=(.2, .1), pos_hint={'center_x': .35, 'y': .05})
        self.button_2 = Button(text=list[1], size_hint=(.2, .1), pos_hint={'center_x': .64, 'y': .05})
        self.add_widget(self.button_1)
        self.add_widget(self.button_2)

class Application(App):
    def build(self):
        sm = ScreenManagement(transition=FadeTransition())
        sm.add_widget(Iniciar(name='iniciar'))
        sm.add_widget(Categorical(name='categorical'))
        return sm

if __name__ == "__main__":
    Application().run()
 

В этом случае я изменяю список, содержащий значения текстов кнопок

Ответ №1:

Вам не нужно использовать list для этого. Один из простых способов сделать это — присвоить виджету кнопки переменную и использовать button.text . Как и в вашем коде, вы присвоили виджету кнопки переменную с именем self.button_1 and self.button_2 . Итак, чтобы изменить текст button_1, просто сделайте self.button_1.text = 'new' то же самое для button_2, self.button_2.text='new2'

Ответ №2:

self.manager.get_screen('ScreenWithButton').ids['buttonid'].text = ""