代码之家  ›  专栏  ›  技术社区  ›  Gaurav Singh

在另一个屏幕中声明Get变量

  •  0
  • Gaurav Singh  · 技术社区  · 8 年前

    我正在开发一个简单的KivyGUI应用程序。我想做的是,我想从第二个屏幕(未在其中创建)访问“CL\u random”类的一个对象“obj\u random”。我只是不知道如何将一个屏幕中声明的内容访问到不同的屏幕。

    from kivy.app import App
    from kivy.uix.floatlayout import FloatLayout
    #from kivy.uix.boxlayout import BoxLayout
    #from kivy.uix.popup import Popup
    from kivy.uix.screenmanager import ScreenManager, Screen
    from kivy.lang import Builder
    from kivy.properties import ObjectProperty
    
    
    class CL_FirstWindow(Screen):
        def change_screen(self):
            obj_random = CL_Random()
            self.parent.current = 'second_window'
    
    class CL_SecondWindow(Screen):
        scond_prop = ObjectProperty(None)
        def change_screens(self):
            self.parent.current = 'first_window'
    
    class ScreenManagement(ScreenManager):
        pass
    
    class CL_Random:
        def __init__(self):
            self.x = 5
    
    presentation = Builder.load_file("rough2.kv")
    
    class app(App):
         def build(self):
            return presentation
    
    
    obj_app = app()
    obj_app.run()
    

    粗糙度2。千伏

    ScreenManagement:
        CL_FirstWindow:
        CL_SecondWindow:
    
    <CL_FirstWindow>:
        id: first_window_id
        name: 'first_window'
        FloatLayout:
            Button:
                text: 'Button1'
                size_hint: 0.3, 0.12
                pos_hint: {'x':0.1,'y':0.6}
                on_release: root.change_screen()
    <CL_SecondWindow>:
        id: second_window_id
        name: 'second_window'
        FloatLayout:
            Button:
                text: 'Button2'
                size_hint: 0.3, 0.12
                pos_hint: {'x':0.1,'y':0.6}
                on_release: root.change_screens()
            Label:
                id: second_label_id
                text: 'SECOND SCREEN'
                pos_hint: {'x': 0.20, 'y':0.8}
                size_hint: 1, 0.1
                font_size: 35
                halign: 'left'
                valign: 'middle'
                text_size: self.size
    

    Thnks公司

    1 回复  |  直到 8 年前
        1
  •  0
  •   eyllanesc    8 年前

    要访问在类中声明的变量,第一件事是该变量必须是类的属性,以便作用域更大,但与您的情况一样,该变量是局部变量,当它完成执行函数时将被消除。

    另一方面,解决方案基于通过访问其他屏幕 ScreenManager ,并使用get\u screen()方法对其属性进行对象访问:

    CL_SecondWindow --> ScreenManager --> CL_FirstWindow --> obj_random
    

    from kivy.app import App
    from kivy.uix.screenmanager import ScreenManager, Screen
    from kivy.lang import Builder
    from kivy.properties import ObjectProperty
    
    
    class CL_FirstWindow(Screen):
        def change_screen(self):
            self.obj_random = CL_Random()
            self.manager.current = 'second_window'
    
    class CL_SecondWindow(Screen):
        scond_prop = ObjectProperty(None)
        def change_screens(self):
            first_screen = self.manager.get_screen('first_window')
            print(first_screen.obj_random.x)
    
            self.parent.current = 'first_window'
    
    class ScreenManagement(ScreenManager):
        pass
    
    class CL_Random:
        def __init__(self):
            self.x = 5
    
    presentation = Builder.load_file("rough2.kv")
    
    class app(App):
         def build(self):
            return presentation
    
    
    obj_app = app()
    obj_app.run()