Я использую python и kivy, чтобы написать приложение. Для простоты я хочу найти способ переключения между экранами без необходимости объявлять функцию go на экране в каждом отдельном классе.
Например, в моем классе UserLogin я определяю функцию с именем to_mainmenu
, который можно использовать для go возврата к виджету EntryScreen. Я хочу использовать эту функцию в виджете MainScreen в соответствующем KV-файле, особенно для кнопки с надписью 'option', но поскольку она была объявлена в другом классе, я не знаю синтаксиса для вызова to_mainmenu
в этом kv файл. Как его назвать?
Ниже код python:
import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager
from kivy.uix.screenmanager import Screen
from kivy.properties import ObjectProperty
kivy.require('1.11.1')
class EntryScreen(GridLayout):
def to_newuser(self):
main_app.screen_manager.current = 'New Account'
# yes
def to_userlogin(self):
main_app.screen_manager.current = 'User Login'
def to_mainmenu(self):
main_app.screen_manager.current = 'Main Screen'
class UserLogin(GridLayout):
name1 = ObjectProperty(None)
password1 = ObjectProperty(None)
def to_entryscreen(self):
main_app.screen_manager.current = 'Entry Screen'
def to_login(self):
main_app.screen_manager.current = 'Login Screen'
def to_mainscreen(self):
main_app.screen_manager.current = 'Main Screen'
class NewAccount(GridLayout):
def to_mainmenu(self):
main_app.screen_manager.current = 'Main Screen'
class MainScreen(GridLayout):
pass
class MapGem(App):
def build(self):
self.screen_manager = ScreenManager()
self.entry_screen = EntryScreen()
screen = Screen(name='Entry Screen')
screen.add_widget(self.entry_screen)
self.screen_manager.add_widget(screen)
self.user_login = UserLogin()
screen = Screen(name='User Login')
screen.add_widget(self.user_login)
self.screen_manager.add_widget(screen)
self.new_account = NewAccount()
screen = Screen(name='New Account')
screen.add_widget(self.new_account)
self.screen_manager.add_widget(screen)
self.mainscreen = MainScreen()
screen = Screen(name='Main Screen')
screen.add_widget(self.mainscreen)
self.screen_manager.add_widget(screen)
return self.screen_manager
if __name__ == '__main__':
main_app = MapGem()
main_app.run()
Ниже файл kivy
<EntryScreen>
cols: 1
Button:
text: 'New User'
on_press: root.to_newuser()
Button:
text: 'Login'
on_press: root.to_userlogin()
Button:
text: 'Skip Login'
on_press:
#root.manager.transition.direction = 'right'
root.to_mainmenu()
<UserLogin>
name1: name
password1: password
cols: 2
Label:
text: 'Login to Account'
Label:
text: ''
Label:
text: 'Username'
TextInput:
id: name
multiline: False
Label:
text: 'Password'
TextInput:
id: password
multiline: False
password: True
Button:
text: 'Submit'
on_press: root.to_mainscreen()
Button:
text: 'Go back to Entry Screen'
on_press: root.to_entryscreen()
<NewAccount>
cols: 2
Label:
text: 'Create New Account'
Label:
text: ''
Label:
text: 'Username'
TextInput:
multiline: False
Label:
text: 'Password'
TextInput:
multiline: False
password: True
Button:
text: 'Submit'
on_press: root.to_mainmenu()
<MainScreen>
cols: 1
Button:
text: 'Create New Maps'
Button:
text: 'View Maps'
Button:
text: 'Options'
# on_press: something to call UserLogin.to_entryscreen()
Я все еще привыкаю к как kivy обрабатывает OOP и что означают root, app и другие имена. Итак, я уверен, что это очень простой c и простой вопрос, поэтому заранее прошу прощения, если он покажется обыденным.