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….
JavaScript
x
58
58
1
from kivymd.app import MDApp
2
from kivy.uix.screenmanager import Screen,ScreenManager
3
from kivy.lang import Builder
4
from kivymd.uix.list import OneLineListItem
5
6
#Builder String
7
helper_string = '''
8
ScreenManager:
9
Hello:
10
Bye:
11
<Hello>:
12
name: 'hello'
13
ScrollView:
14
MDList:
15
id: list
16
17
<Bye>:
18
name: 'bye'
19
MDLabel:
20
text:'Good Bye'
21
MDLabel:
22
id:'aaa'
23
text:""
24
25
'''
26
class Hello(Screen):
27
pass
28
class Bye(Screen):
29
pass
30
sm = ScreenManager()
31
sm.add_widget(Hello(name = 'hello'))
32
sm.add_widget(Bye(name = 'bye'))
33
34
35
class DemoApp(MDApp):
36
def build(self):
37
screen = Screen()
38
39
self.help_str = Builder.load_string(helper_string)
40
41
screen.add_widget(self.help_str)
42
return screen
43
44
def on_start(self):
45
for i in range(50):
46
item = OneLineListItem(text='Item ' + str(i),
47
on_release=lambda x, value_for_pass={i}: self.passValue(value_for_pass)
48
)
49
self.help_str.get_screen('hello').ids.list.add_widget(item)
50
51
52
def passValue(self, *args):
53
args_str = ','.join(map(str,args))
54
print(args_str)
55
self.help_str.get_screen('bye').manager.current = 'bye' #how to pass/send args_str's value to bye screen???
56
57
DemoApp().run()
58
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
,
JavaScript
1
6
1
<Bye>:
2
name: 'bye'
3
MDLabel:
4
id: target
5
text:'Good Bye'
6
Then in your method passValue
,
JavaScript
1
7
1
def passValue(self, *args):
2
args_str = ','.join(map(str,args))
3
print(args_str)
4
bye_screen = self.help_str.get_screen('bye')
5
bye_screen.manager.current = 'bye'
6
bye_screen.ids.target.text = args_str
7
As a side note you perhaps don’t need (as you already defined that in kvlang
) the following:
JavaScript
1
4
1
sm = ScreenManager()
2
sm.add_widget(Hello(name = 'hello'))
3
sm.add_widget(Bye(name = 'bye'))
4