Как я могу изменить значение текста в метке на 2-м экране, нажав кнопку на 1-м экране?
В моем примере у меня 2 экрана, на первом 3 кнопки; один должен изменить текст на «1-й текст», второй должен изменить текст на «2-й текст», а третий используется для перемещения между этими двумя экранами.
На втором экране есть Ярлык, текст которого нужно менять, нажимая кнопки. Затем есть также кнопка, используемая для перехода к первому экрану.
Мой .py выглядит так:
import kivy
kivy.require("1.10.1")
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.app import App
class Screen1(Screen):
pass
class Screen2(Screen):
pass
class Select_text(App):
def build(self):
sm = ScreenManager(transition=FadeTransition())
sm.add_widget(Screen1(name = "scr1"))
sm.add_widget(Screen2(name = "scr2"))
return sm
app = Select_text()
app.run()
Мой .kv выглядит так:
<Screen1>:
id: scr1
orientation: "vertical"
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: "Background.png"
Button:
id: change_to_1
pos: (root.width-self.width)/2, 400
size: 1200, 200
size_hint: None, None
text: "Change the text on the 2nd screen to »1st text«"
#on_press: (I don‘t know what should be there)
Button:
id: change_to_2
pos: (root.width-self.width)/2, 800
size: 1200, 200
size_hint: None, None
text: "Change the text on the 2nd screen to »2nd text«"
#on_press: (I don‘t know what should be there)
Button:
id: go_to_other_screen
pos: (root.width-self.width)/2, 1400
size: 600, 200
size_hint: None, None
text: "Go to other screen"
on_press: root.manager.current = "scr2"
<Screen2>:
id: scr2
orientation: "vertical"
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: "Background.png"
Label:
id: text
text: "Text which should be changed"
pos: (root.width-self.width)/2, 800
size: 600, 200
Button:
id: go_to_other_screen
pos: (root.width-self.width)/2, 1400
size: 600, 200
size_hint: None, None
text: "Go to other screen"
on_press: root.manager.current = "scr1"
Я пытался искать в Интернете, но это не решило основную проблему. Спасибо за любой ответ.
В файле kv вызовите функцию на экране 1 класса. Затем вы можете использовать функцию get_screen для доступа к другому экрану и изменить его текст в этой функции.
Вероятно, будет выглядеть примерно так: (в файле kv)
on_press: root.functionname()
(основной файл питона)
def functionname(self):
self.manager.get_screen('scr2').ids.text.text = "whatever you want here"
Могу ли я также предложить изменить идентификатор текста, который вы меняете, на что-то другое, потому что это выглядит немного запутанным с ids.text.text
Для получения дополнительной информации о функции get_screen, если вы не уверены в этом https://medium.com/nerd-for-tech/kivy-use-get-screen-to-access-objects-from-other-screens-8d4d6f288f3