Получить переменную, объявленную на другом экране - PullRequest
0 голосов
/ 25 апреля 2018

Я работаю над одним простым приложением Kivy GUI. То, что я пытаюсь сделать, это то, что я хочу получить доступ к одному объекту 'obj_random' класса 'CL_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()

rough2.kv

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 Ответ

0 голосов
/ 25 апреля 2018

Для доступа к переменной, объявленной внутри класса, первое, что эта переменная должна быть атрибутом класса, чтобы область действия была больше, но, как и в вашем случае, переменная является локальной, и она будет исключена, когда оназавершает выполнение функции.

С другой стороны, решение основано на доступе к другому Экрану через ScreenManager, и при доступе объекта к атрибуту для него мы используем метод get_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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...