#python #kivy
#python #kivy
Вопрос:
Я новичок в Kivy и изо всех сил пытаюсь изменить элементы в MainWindow в зависимости от того, что происходит во втором окне. Приведенный ниже код показывает, как далеко я продвинулся самостоятельно. Нажатие кнопки «A» во втором окне запускает событие в WindowManager и выводит «A» в консоль. Тем не менее, я хотел бы обновить id: labeltext в MainWindow на основе этого щелчка. Можно ли это как-то сделать напрямую или как мне передать информацию из WindowManager в MainWindow. Если да, то как? Я новичок в объектно-ориентированном программировании, поэтому эти вещи вызывают у меня много головных болей. Спасибо!
Код Python:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.popup import Popup
from kivy.uix.textinput import TextInput
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
class MainWindow(Screen):
pass
class SecondWindow(Screen):
pass
class WindowManager(ScreenManager):
def keykey(self,whichkey):
print(whichkey)
kv = Builder.load_file("multiscreen.kv")
class MyMainApp(App):
def build(self):
return kv
if __name__ == '__main__':
MyMainApp().run()
Kivy:
WindowManager:
MainWindow:
SecondWindow:
<MainWindow>:
name: "main"
labeltext: labeltext
Label:
id: labeltext
text: "XXX"
size_hint: 0.2, 0.1
pos_hint: {"x":0.5, "y":0.8}
Button:
text: "Go Second"
size_hint: 0.1, 0.1
pos_hint: {"x":0.9, "y":0.9}
on_release:
app.root.current = "second"
root.manager.transition.direction = "left"
<SecondWindow>:
name: "second"
Button:
text: "A"
size_hint: 0.1, 0.1
pos_hint: {"x":0.5, "y":0.5}
on_release:
root.manager.keykey('A')
print("dfd")
Button:
text: "Go Main"
size_hint: 0.1, 0.1
pos_hint: {"x":0.0, "y":0.9}
on_release:
app.root.current = "main"
root.manager.transition.direction = "right"
Ответ №1:
В вашем kv
измените правило для Button
включения:
root.manager.get_screen('main').ids.labeltext.text = 'New Text'