я не могу очистить корень в киви - PullRequest
0 голосов
/ 27 октября 2018

Я хочу очистить экран и принести новые виджеты в зависимости от некоторых кнопок или ситуаций. первая страница вторая страница и т. д.

Но я либо переношу виджеты на старые, либо у меня возникли проблемы, которых я не понимаю.

вот мои коды

main.py

from kivy.app import App

class PageOne(App):
    def p_1(self):
        self.root.clear_widgets()
        PageTwo().run()

    def build(self, *args):
        pass

class PageTwo(App):
    def p_2(self):
        self.root.clear_widgets()
        PageOne().run()

    def build(self):
        pass

PageOne().run()

pageone.kv :

FloatLayout:
    Label:
        size_hint: 1, 0.7
        pos_hint: {"top":1}
        text: "Page 1"
    Button:
        size_hint: 1, 0.3
        pos_hint: {"top": 0.3}
        text: "Open Page 2"
        on_press: app.p_1()

pagetwo.kv :

FloatLayout:
    Label:
        size_hint: 1, 0.5
        pos_hint: {"top":1}
        text: "Page 2"
    Button:
        size_hint: 1, 0.3
        pos_hint: {"top": 0.3}
        text: "Open Page 1"
        on_press: app.p_2()

некоторые предупреждения

[INFO   ] [MTD         ] Read event from </dev/input/event6>
[INFO   ] [Base        ] Start application main loop
[WARNING] [MTD         ] Unable to open device "/dev/input/event6". Please ensure you have the appropriate permissions.
[WARNING] [MTD         ] Unable to open device "/dev/input/event6". Please ensure you have the appropriate permissions.
[INFO   ] [Base        ] Leaving application in progress...
.
.
 AttributeError: 'PageOne' object has no attribute 'p_2'

Что я делаю не так !? заранее спасибо

1 Ответ

0 голосов
/ 27 октября 2018

Может быть только одно приложение, если вы хотите иметь несколько представлений, вы должны использовать несколько Screen с ScreenManager, например:

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


class PageOne(Screen):
    def p_1(self):
        self.manager.current = 'PageTwo'

class PageTwo(Screen):
    def p_2(self):
        self.manager.current = 'PageOne'

Builder.load_string('''
<PageOne>:
    FloatLayout:
        Label:
            size_hint: 1, 0.7
            pos_hint: {"top":1}
            text: "Page 1"
        Button:
            size_hint: 1, 0.3
            pos_hint: {"top": 0.3}
            text: "Open Page 2"
            on_press: root.p_1()

<PageTwo>:
    FloatLayout:
        Label:
            size_hint: 1, 0.5
            pos_hint: {"top":1}
            text: "Page 2"
        Button:
            size_hint: 1, 0.3
            pos_hint: {"top": 0.3}
            text: "Open Page 1"
            on_press: root.p_2()
''')

manager = ScreenManager()
manager.add_widget(PageOne(name="PageOne"))
manager.add_widget(PageTwo(name="PageTwo"))

class MainApp(App):
    def build(self):
        return manager

if __name__ == '__main__':
    MainApp().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...