Как изменить hint_text у TextInput в kivy python?
Смотрите, изначально я думал что смогу просто изменить hint_text. Нужно изменить значение hint_text у Text_input который находится на другом экране. Но я не могу получить доступ к его id, TextInput находится в другом классе (на другом экране) . Для подробности вот кусок кода:
class FirstScreen(Screen):
def __init__(self, **kwargs):
super().__init__(**kwargs)
class SecondScreen(Screen):
def __init__(self, **kwargs):
super().__init__(**kwargs)
def previous_button(self):
self.manager.current = 'first'
def messageShow(self):
try:
print("Text:", float(self.ids['price'].text.replace(',', '.').replace('б', '.')))
except:
pass
Builder.load_string(f'''
<FirstScreen>:
GridLayout:
cols: 4
Button:
id: iron
text: 'Чёрный'
font_size: 50
on_press: # Здесь нужна функция которая будет изменять hint_text у TextInput
# но проблема в том что этот TextInput находится на другом экране, то есть в другом классе
# и я не могу получить доступ к его id
on_press: root.manager.current='second'
<SecondScreen>:
BoxLayout:
orientation:'vertical'
padding: (500, 10)
TextInput:
id: weight
multiline: False
font_size: 100
size_hint: (1, .4)
TextInput:
id: price
hint_text: '0' # Этот hint_text нам и нужно изменить
multiline: False
font_size: 100
size_hint: (1, .4)
on_text_validate: root.messageShow()
Button:
text:'Добавить'
size_hint:(1,0.2)
Button:
text:'Previous'
size_hint:(1,0.2)
on_press:root.previous_button()
''')
class TestApp(App):
def build(self):
global quantity
sm = ScreenManager()
sm.add_widget(FirstScreen(name='first'))
sm.add_widget(SecondScreen(name='second'))
return sm
if __name__ == "__main__":
TestApp().run()
Ответы (1 шт):
Вы можете создать функцию, которая при нажатии на кнопку, будет перенаправлять в другой класс (manager.current = “nameScreen”) и при переходе в этот класс - будет изменяться сам hint_text. То есть, Вы сможете в этом же классе, где TextInput, получить нужный Вам id. Особенность может быть та, что ScreenManager сразу загружает все обьекты со всех Screen. Тогда Вам нужно через Clock.schedule_once реализовать переход до функции, которая будет непосредственно изменять hint_text.