#python #kivy #kivy-language
#python #kivy #kivy-language
Вопрос:
Я пытаюсь изменить экран в Kivy на экран выхода, где у меня есть две кнопки. Yes
, No
. Если я нажму Yes
, я хочу нормально завершить код. Когда No
я хотел бы вернуться на предыдущую страницу, но я не могу передать имя предыдущей страницы на exit page
Метод моего класса приложения
def change_screen(self, screen_name, type_=SlideTransition(), page_before=None):
# Get screen_manager from main.kv file
screen_manager = self.root.ids['screen_manager']
# Set transition (https://kivy.org/doc/stable/api-kivy.uix.screenmanager.html)
if type_ == "RiseInTransition":
screen_manager.transition = RiseInTransition()
else:
screen_manager.transition = SlideTransition()
if page_before: #tried **kwargs, doesn't work, because current accept only str
page_before = {"page_before": page_before}
screen_manager.current = screen_name
.kv файл
Button:
text: "end"
size_hint : .2, .1
pos: ((root.width - self.width) -20, 20)
background_color : 0.1, 0.5, 0.6, 1
on_release:
app.change_screen("exit_screen", type_="RiseInTransition", page_before="something")
Как я мог бы передать page_before
переменную в
class ExitScreen(Screen):
pass
???
Ответ №1:
Вы можете вызвать on_press: root.manager.current = 'YourScreenName'
непосредственно на языке kv, чтобы немного упростить переходы между экранами?
Попробуйте приведенный ниже пример:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
Builder.load_string("""
<MainScreen1>:
GridLayout:
cols: 2
Button:
text: 'Yes'
on_press: root.buttonpress()
Button:
text: 'No'
on_press:
root.manager.transition.direction = 'left'
root.manager.current = 'screen2'
root.otherfunction()
<MainScreen2>:
GridLayout:
cols: 2
Button:
text: 'No'
on_press: root.buttonpress()
Button:
text: 'Yes'
on_press:
root.manager.transition.direction = 'up'
root.manager.current = 'screen1'
root.otherfunction()
""")
# Declare both screens
class MainScreen1(Screen):
def buttonpress(self): # load in new bdf function graph
print("You pressed a button on screen1")
def otherfunction(self):
print("do other function")
class MainScreen2(Screen):
def buttonpress(self): # load in new bdf function graph
print("You pressed a button on screen2")
def otherfunction(self):
print("do other function")
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MainScreen1(name='screen1'))
sm.add_widget(MainScreen2(name='screen2'))
class TestApp(App):
def build(self):
return sm
if __name__ == '__main__':
TestApp().run()
Любые вопросы просто задавайте.