如果我在另一个屏幕中,如何获取屏幕的 MDTextField(或数据 "Login")的文本。 (Kivy/KivyMD/Python)
How can i get the text of an MDTextField (Or Data "Login") of an screen if im in another Screen. (Kivy / KivyMD / Python)
我是新人,使用 classes 和 kivy/kivyMD,我遇到了麻烦,我想获取属于的 MDTextFied(或我的查询的数据“登录”)的文本到 AScreen 如果我从 BScreen 的 class 定义工作?
我的最小代码就像,ScreenManager 文件:
<AScreen>:
name:'ascreen'
MDBoxLayout:
orientation: 'vertical'
MDTextField:
id: user
hint_text: 'User'
MDRectangleFlatButton:
text:'Login'
on_release: root.login_button()
<BScreen>:
name:'bscreen'
MDRectangleFlatButton:
text:'Registrar Equipo'
on_release: root.show_login_data()
我的屏幕的class文件是:
class AScreen(Screen):
def login_button(self):
...
login = #User DB info
"""Here i do a query to the DB with the text of my MDTextField on AScreen
i use self.ids.user.text to get the text of the AScreen MDTextField
if the user exist in the DB i save the user's data on a variable named "login" """
class BScreen(Screen):
def show_login_data(self):
print()
现在我只是想打印来自 AScreen.ids.user.text 的文本,或者也获取登录变量,但我都没有。
我的主文件是:
sm = ScreenManager()
sm.add_widget(screensfile.AScreen(name='ascreen'))
sm.add_widget(screensfile.BScreen(name='bscreen'))
class MainApp(MDApp):
def build(self):
self.screen = Builder.load_string(screen_helper)
return self.screen
MainApp().run()
我已经尝试了以下方法(我为我可怕的菜鸟错误道歉):
打印(AScreen.login_button()。登录)
打印(Acreen.ids.user.text)
我知道这里有类似的情况,但它对我的 screens.py 文件没有帮助:
我知道最有可能的事情是我对 classes 的工作有一个错误的解释,但是屏幕在 kivy 中的工作方式(屏幕寻找 class 的定义=48=]同名)我不知道该怎么做。
谁能帮帮我?
假设您的 screen_helper
将 ScreenManager
定义为 Apps 根小部件,将 AScreen
和 BScreen
作为其子项。在这种情况下,您可以将 AScreen
中的 MDTextField
引用为:
App.get_running_app().root.get_screen('ascreen').ids.user
App.get_running_app()
returns 运行 App
的实例。 root
引用根小部件(我假设它是 ScreenManager
)。 ScreenManager
returns AScreen
实例的 get_screen()
方法,ids.user
获取对 MDTextField
的引用。
尝试使用 class AScreen
访问 ID 将不起作用,因为 ID 是在 AScreen
.
的实例中定义的
顺便提一句,如果您的 build()
方法 returns Builder.load_string
的结果,那么行:
sm = ScreenManager()
sm.add_widget(screensfile.AScreen(name='ascreen'))
sm.add_widget(screensfile.BScreen(name='bscreen'))
正在构建未使用的 sm
,可以将其删除。
我是新人,使用 classes 和 kivy/kivyMD,我遇到了麻烦,我想获取属于的 MDTextFied(或我的查询的数据“登录”)的文本到 AScreen 如果我从 BScreen 的 class 定义工作?
我的最小代码就像,ScreenManager 文件:
<AScreen>:
name:'ascreen'
MDBoxLayout:
orientation: 'vertical'
MDTextField:
id: user
hint_text: 'User'
MDRectangleFlatButton:
text:'Login'
on_release: root.login_button()
<BScreen>:
name:'bscreen'
MDRectangleFlatButton:
text:'Registrar Equipo'
on_release: root.show_login_data()
我的屏幕的class文件是:
class AScreen(Screen):
def login_button(self):
...
login = #User DB info
"""Here i do a query to the DB with the text of my MDTextField on AScreen
i use self.ids.user.text to get the text of the AScreen MDTextField
if the user exist in the DB i save the user's data on a variable named "login" """
class BScreen(Screen):
def show_login_data(self):
print()
现在我只是想打印来自 AScreen.ids.user.text 的文本,或者也获取登录变量,但我都没有。
我的主文件是:
sm = ScreenManager()
sm.add_widget(screensfile.AScreen(name='ascreen'))
sm.add_widget(screensfile.BScreen(name='bscreen'))
class MainApp(MDApp):
def build(self):
self.screen = Builder.load_string(screen_helper)
return self.screen
MainApp().run()
我已经尝试了以下方法(我为我可怕的菜鸟错误道歉): 打印(AScreen.login_button()。登录) 打印(Acreen.ids.user.text)
我知道这里有类似的情况,但它对我的 screens.py 文件没有帮助:
我知道最有可能的事情是我对 classes 的工作有一个错误的解释,但是屏幕在 kivy 中的工作方式(屏幕寻找 class 的定义=48=]同名)我不知道该怎么做。 谁能帮帮我?
假设您的 screen_helper
将 ScreenManager
定义为 Apps 根小部件,将 AScreen
和 BScreen
作为其子项。在这种情况下,您可以将 AScreen
中的 MDTextField
引用为:
App.get_running_app().root.get_screen('ascreen').ids.user
App.get_running_app()
returns 运行 App
的实例。 root
引用根小部件(我假设它是 ScreenManager
)。 ScreenManager
returns AScreen
实例的 get_screen()
方法,ids.user
获取对 MDTextField
的引用。
尝试使用 class AScreen
访问 ID 将不起作用,因为 ID 是在 AScreen
.
顺便提一句,如果您的 build()
方法 returns Builder.load_string
的结果,那么行:
sm = ScreenManager()
sm.add_widget(screensfile.AScreen(name='ascreen'))
sm.add_widget(screensfile.BScreen(name='bscreen'))
正在构建未使用的 sm
,可以将其删除。