Как сменить экран свайпом в kivy python - PullRequest
2 голосов
/ 20 июня 2020

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

main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen
from kivy.uix.button import ButtonBehavior
from kivy.uix.image import Image
from kivy.uix.label import Label
from kivy.uix.carousel import Carousel
from kivy.uix.widget import Widget
from kivy.uix.popup import Popup


class HomeScreen(Screen):
    def on_touch_move(self, touch):
        if touch.x < touch.ox: # this line checks if a left swipe has been detected
            MainApp().change_screen(screen_name="swipedhikr_screen") # calls the method in the main app that changes the screen


class ImageButton(ButtonBehavior, Image):
    pass


class LabelButton(ButtonBehavior, Label):
    pass


class SettingsScreen(Screen):
    pass


class SwipeDhikrScreen(Screen):
    pass


#def quit_verification():

 #   pop = Popup(title="verification", content=Label(text= "Are you sure?"))


GUI = Builder.load_file("main.kv")


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

    def change_screen(self, screen_name):
        # get the screen manager from the kv file
        screen_manager = self.root.ids["screen_manager"]
        screen_manager.transition.direction = "up"
        screen_manager.current = screen_name

    def quit_app(self):
        MainApp().stop()




MainApp().run()

Я получил ошибку атрибута: «Ни один объект типа не имеет атрибута 'ids'»

1 Ответ

2 голосов
/ 20 июня 2020
MainApp().change_screen(screen_name="swipedhikr_screen")

Эта строка создает новый экземпляр MainApp, который не имеет никаких виджетов и поэтому, естественно, не работает при попытке доступа к ним.

Используйте существующие экземпляр MainApp, то есть тот, который вы на самом деле используете, через MainApp.get_running_app().

Также вы ошибаетесь, что Карусель работает только с изображениями.

...