Я полностью запутался в концепции Kivy OOP, несмотря на некоторую помощь со стороны нескольких участников из предыдущих постов и чтения на разных примерах.
Фрагмент кода настолько короткий, насколько я могу его сократить.
У меня вопрос, как мне получить доступ к методу с Screen_2 на Screen_1. Если я правильно понимаю python и OOP, то путь написан правильно. Вы добавляете экземпляр класса и затем используете этот экземпляр для доступа к методу, однако он не работает. следующий код обновляется после моих последних комментариев:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.listview import ListItemButton
from kivy.uix.screenmanager import ScreenManager, Screen
class Manager(ScreenManager):
main_screen = ObjectProperty()
profile_screen = ObjectProperty()
class MainScreen(Screen):
first_name_text_input= ObjectProperty()
last_name_text_input= ObjectProperty()
student_list = ObjectProperty()
def submit_student(self):
print ("hi")
class ProfileScreen(Screen):
def __init__(self, **kwargs):
super(ProfileScreen, self).__init__(**kwargs)
self.app = App.get_running_app()
self.a = self.app.ms
def okay(self):
self.a.submit_student()
class StudentDBApp(App):
ms = MainScreen()
def build(self):
return Manager()
if __name__=="__main__":
StudentDBApp().run()
В общем, я понимаю, как работает OOP. Моя борьба всегда сводится к графическому интерфейсу и OOP. еще раз спасибо за ваше время.
вот файл kv
<Manager>:
id: screen_manager
main_screen: main_screen
profile_screen: profile_screen
MainScreen:
id: main_screen
name:"main_screen"
manager: screen_manager
ProfileScreen:
id: profile_screen
name: "profile_screen"
manager: screen_manager
<MainScreen>:
first_name_text_input: first_name
last_name_text_input: last_name
BoxLayout:
orientation: "vertical"
BoxLayout:
Label:
text:"First Name:"
TextInput:
id: first_name
Label:
text:"Last Name:"
TextInput:
id: last_name
BoxLayout:
Button:
text:"Submit"
on_release: root.submit_student()
Button:
text: "New"
on_release: root.manager.current="profile_screen"
<ProfileScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text:"Back"
on_release: root.manager.current="main_screen"
Button:
text: "Okay"
on_release: root.okay()