Обновление MainWindow на основе действий во втором окне

#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'