output KivyMD Programmers, im new in KivyMD….
on_start() list items are sucessfully showing and on_press sending a selected value too passValue() function….
but here now i wants open new Screen under passValue() function…and pass variable value’s to new Screen….
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen,ScreenManager
from kivy.lang import Builder
from kivymd.uix.list import OneLineListItem
#Builder String
helper_string = '''
ScreenManager:
Hello:
Bye:
<Hello>:
name: 'hello'
ScrollView:
MDList:
id: list
<Bye>:
name: 'bye'
MDLabel:
text:'Good Bye'
MDLabel:
id:'aaa'
text:""
'''
class Hello(Screen):
pass
class Bye(Screen):
pass
sm = ScreenManager()
sm.add_widget(Hello(name = 'hello'))
sm.add_widget(Bye(name = 'bye'))
class DemoApp(MDApp):
def build(self):
screen = Screen()
self.help_str = Builder.load_string(helper_string)
screen.add_widget(self.help_str)
return screen
def on_start(self):
for i in range(50):
item = OneLineListItem(text='Item ' + str(i),
on_release=lambda x, value_for_pass={i}: self.passValue(value_for_pass)
)
self.help_str.get_screen('hello').ids.list.add_widget(item)
def passValue(self, *args):
args_str = ','.join(map(str,args))
print(args_str)
self.help_str.get_screen('bye').manager.current = 'bye' #how to pass/send args_str's value to bye screen???
DemoApp().run()
Advertisement
Answer
Since It’s not clear exactly where in your screen Bye you want some variable to be passed, let’s suppose you want to pass a list’s text to the MDLabel having text ‘Good Bye’ of the screen Bye by method passValue.
You may achieve this as follows:
First in the kvlang of screen Bye assign an id say, target to the MDLabel,
<Bye>:
name: 'bye'
MDLabel:
id: target
text:'Good Bye'
Then in your method passValue,
def passValue(self, *args):
args_str = ','.join(map(str,args))
print(args_str)
bye_screen = self.help_str.get_screen('bye')
bye_screen.manager.current = 'bye'
bye_screen.ids.target.text = args_str
As a side note you perhaps don’t need (as you already defined that in kvlang) the following:
sm = ScreenManager() sm.add_widget(Hello(name = 'hello')) sm.add_widget(Bye(name = 'bye'))