Kivy HELP: Диспетчер виджетов и экранов

Итак, я создаю приложение, и мне нужно это:

Виджет 1: — GridLayout с данными из файла JSON, каждая строка данных соответствует кнопке, поэтому обычно при нажатии на кнопку появляется всплывающее окно. - Всплывающее окно: содержит цифровую клавиатуру для ввода пароля, а затем вы нажимаете кнопку для входа в основной виджет.

Основной виджет: — этот виджет считывает данные из файла JSON, а затем помещает их в сетку, как и в виджете 1.

Я могу делать виджеты просто отлично, на питоне, а не на языке kv, и я просто не могу ничего сделать: перейти с виджета 1 на основной виджет... Пожалуйста, помогите мне, я застрял с этой штукой на долгое время ...


person Pedro Couto    schedule 10.07.2013    source источник
comment
Добро пожаловать в СО Педро. Ваш вопрос, скорее всего, получит ответы, если вы опубликуете пример кода того, что вы уже пробовали.   -  person butch    schedule 10.07.2013
comment
Я не понимаю, в чем проблема с JSON. Я привел вам пример, как перейти с Screen 1 на Screen 2. Возможно, ваша проблема в том, что вы используете любой другой Widget, а не Widget. ScreenManager принимает только Screen виджетов.   -  person toto_tico    schedule 10.07.2013


Ответы (1)


Чтобы переключаться между экранами, вам просто нужно использовать свойство current. По сути, вы должны указать ScreenManager, какой экран является текущим, но сначала вы должны указать им имя. Вот вам пример:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout

Builder.load_string("""
<Phone>:
    AnchorLayout:
        anchor_x: 'center'
        anchor_y: 'top'
        ScreenManager:
            size_hint: 1, .9
            id: _screen_manager
            Screen:
                name: 'screen1'
                Label: 
                    text: 'The first screen'
            Screen:
                name: 'screen2'
                Label: 
                    text: 'The second screen'
    AnchorLayout:
        anchor_x: 'center'
        anchor_y: 'bottom'
        BoxLayout:
            orientation: 'horizontal'
            size_hint: 1, .1
            Button:
                text: 'Go to Screen 1'
                on_press: _screen_manager.current = 'screen1'
            Button:
                text: 'Go to Screen 2'
                on_press: _screen_manager.current = 'screen2'""")

class Phone(FloatLayout):
    pass

class TestApp(App):
    def build(self):
        return Phone()

if __name__ == '__main__':
    TestApp().run()

Линия

on_press: _screen_manager.current = 'screen1'

сообщит диспетчеру экрана, чтобы он изменил экран с именем screen1 на эту другую строку

name: 'screen1'
person toto_tico    schedule 10.07.2013
comment
Хороший ответ! Я не ОП, но мне это было полезно. - person Stephen Tetreault; 27.01.2014