Почему следующий экран не отображается в приложении kivy? - PullRequest
0 голосов
/ 24 октября 2019

Я ожидаю, что следующее приложение kivy переключит экраны, когда я нажму и затем отпущу кнопку, но ничего не происходит, и на терминале нет ошибки. Когда я запускаю приложение, появляется экран GirisEkrani, а затем, когда я нажимаю и отпускаю кнопку в GirisEkrani, должен появиться следующий экран (GirisEkrani2). Знаете ли вы, как заставить это работать?

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

Builder.load_string("""
<ekranApp>
    GirisEkrani:
        id: ge
        Button:
            text: "İleri"
            on_release: ge.manager.current = ge.manager.next()

    GirisEkrani2:
        Button:
            id: ge2
            text: "Ileri 2"
            on_release: ge2.manager.current = ge2.manager.next()

    KontrolEkrani:
        id: ke
        Button:
            text: "Geri"
            on_release: ke.manager.current = ke.manager.previous()
""")
class GirisEkrani(Screen):
    pass

class GirisEkrani2(Screen):
    pass

class KontrolEkrani(Screen):
    pass

class ekranApp(App, ScreenManager):
    def build(self):
        #root = ScreenManager()
        #root.add_widget(GirisEkrani(name = "giris_ekrani"))        
        #root.add_widget(GirisEkrani2(name = "giris_ekrani2"))
        #root.add_widget(KontrolEkrani(name = "kontrol_ekrani"))
        return self

if __name__ == "__main__":
    ekranApp().run()

Хотя люди, похоже, выступают за использование файлов .kv, а не за использование чистого Python, я нахожу очень расстраивающим отсутствие ошибок, когда что-то не получается. т работа.

1 Ответ

1 голос
/ 24 октября 2019

Ожидается, что метод build() для App вернет Widget, который будет корнем дерева Widget для вашего App, но ваш метод вернет App. Я подозреваю, что это вызовет проблемы. Однако ваш код не работает, потому что вы не задаете имена Screens. Вот исправленная версия вашего kv:

Builder.load_string("""
<ekranApp>:
    GirisEkrani:
        id: ge
        name: "giris_ekrani"
        Button:
            text: "İleri"
            on_release: ge.manager.current = ge.manager.next()

    GirisEkrani2:
        id: ge2
        name: "giris_ekrani2"
        Button:
            text: "Ileri 2"
            on_release: ge2.manager.current = ge2.manager.next()

    KontrolEkrani:
        id: ke
        name: "kontrol_ekrani"
        Button:
            text: "Geri"
            on_release: ke.manager.current = ke.manager.previous()
""")

Кроме того, ваш id для GirisEkrani2 фактически установлен на Button.

...