Как управлять экранами с другого макета - PullRequest
0 голосов
/ 01 января 2019

Я пытаюсь установить набор кнопок, который управляет отображением экрана, при этом все еще отображаются кнопки.

bobo.py

import kivy
kivy.require("1.9.0")

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout

class ButtSection(BoxLayout):
    pass

class Welcome(Screen):
    pass

class AccountOne(Screen):
    pass

class AccountTwo(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("Bobo.kv")

class BoboApp(App):
    def build(self):
        return presentation

main = BoboApp()
main.run()

Bobo.kv

BoxLayout:
    orientation: "horizontal"
    BoxLayout:
        ButtSection:
            orientation: "vertical"
            Button:
                text: "Account One"
                on_press: app.root.current = "a1"
            Button:
                text: "Account Two"
                on_press: app.root.current = "a2"
            Button:
                text: "Account Three"
                on_press: app.root.current = "a3"

    ScreenManagement:
        Welcome:
            name: "wel"
            Label:
                text: "Welcome To Bobot"
        AccountOne:
            name: "a1"
            Label:
                text: "Page: Account One"
        AccountTwo:
            name: "a2"
            Label:
                text: "Page: Account One"

Когда я запускаю скрипт, экран приветствия является текущим экраном.Когда я нажимаю кнопку, ничего не происходит, даже если я включил 'on_press: app.root.current =' '.

1 Ответ

0 голосов
/ 01 января 2019

Вы должны проанализировать, что означает app.root, и посмотреть, является ли это ScreenManager.

app относится к приложению, которое является экземпляром BoboApp, то есть main.root относится к объекту, который возвращает метод сборки приложения, то есть презентацию.И представление является корневым объектом .kv, то есть BoxLayout.Исходя из того, что мы пришли к выводу, что app.root не является ScreenManager, для которого допустима ошибка.

Вместо того, чтобы использовать root как способ добраться до ScreenManager, к нему можно получить доступ через идентификатор, так как идентификатор доступенв пределах всего дерева.

С другой стороны, я изменил названия экрана, чтобы они соответствовали тем, которые вы хотите установить.

BoxLayout:
    orientation: "horizontal"
    BoxLayout:
        ButtSection:
            orientation: "vertical"
            Button:
                text: "Account One"
                on_press: manager.current = "a1" # <---
            Button:
                text: "Account Two"
                on_press: manager.current = "a2" # <---
            Button:
                text: "Account Three"
                on_press: manager.current = "a3" # <---

    ScreenManagement:
        id: manager # <---
        Welcome:
            name: "a1" # <---
            Label:
                text: "Welcome To Bobot"
        AccountOne:
            name: "a2" # <---
            Label:
                text: "Page: Account One"
        AccountTwo:
            name: "a3" # <---
            Label:
                text: "Page: Account One"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...