I want to update label on kivy by input from Screen1 and show on Screen3. At Screen1 I input at textinput id:slot and 'test' is global variable getting variable from it. and when I tried to do on Screen3. 'test' It can get variable from Screen1 but it's not update on Screen3.
How can i fix it? If i do something wrong , advise me please. I'm beginner.
here is mycode
.py code:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager,Screen,NoTransition
from kivy.properties import ObjectProperty,StringProperty,NumericProperty
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.uix.textinput import TextInput
from kivy.uix.floatlayout import FloatLayout
from kivy.core.window import Window
from kivy.uix.image import Image
from kivy.clock import Clock
import time
import mysql.connector as mariadb
import sys
Window.size=(800,480)
Builder.load_file("mainmenu.kv")
test=''
class Mainscreen(Screen):
pass
class Screen1(Screen):
sslot=StringProperty(None)
sname=StringProperty(None)
sprice=NumericProperty(0)
samount=NumericProperty(0)
def __init__(self,**kwargs):
super(Screen1, self).__init__(**kwargs)
sslot=self.sslot
sname=self.sname
sprice=self.sprice
samount=self.samount
def setprice(self):
global test
if self.f_slot.text!='' and self.f_name.text!='' and self.f_price.text!=0 and self.f_amount.text!=0 :
sslot=str(self.f_slot.text)
sname=self.f_name.text
sprice=int(self.f_price.text)
samount=int(self.f_amount.text)
test=sslot
mariadb_connection = mariadb.connect(host='localhost', user='pop', password='raspberry', database='setprice')
cursor=mariadb_connection.cursor()
sql="UPDATE Setprice SET Name=%s,Price=%s,Amount=%s WHERE Slot=%s"
val=(sname,sprice,samount,sslot)
cursor.execute(sql,val)
mariadb_connection.commit()
self.ids.slot.text=""
self.ids.name.text=""
self.ids.price.text=""
self.ids.amount.text=""
self.ids.slot.focus=True
self.ids.name.focus=False
self.ids.price.focus=False
self.ids.amount.focus=False
else:
print("error")
class Screen2(Screen):
pass
class Screen3(Screen):
#This it what i can't do
fsales=StringProperty()
def __init__(self,**kwargs):
super(Screen3, self).__init__(**kwargs)
Clock.schedule_once(self.updatesales,0.1)
def updatesales(self,*args):
global test
self.fsales=test
print(self.fsales)
class Screen4(Screen):
pass
class Screen21(Screen):
pass
class Screen22(Screen):
pass
class Manager(ScreenManager):
screen_mainmenu=ObjectProperty(None)
screen_menu1=ObjectProperty(None)
screen_menu2=ObjectProperty(None)
screen_menu3=ObjectProperty(None)
screen_menu4=ObjectProperty(None)
class VendingmachineApp(App):
Menu3=Screen3()
def build(self):
m=Manager(transition=NoTransition())
return m
if __name__=="__main__":
VendingmachineApp().run()
.kv code:
<Mainscreen>:
BoxLayout:
orientation:'vertical'
spacing:2
padding:30
Label:
text:"Menu"
font_size:40
Button:
text:"Setprice & amount"
on_press:root.manager.current='screen_menu1'
font_size:30
Button:
text:"Motor"
on_press:root.manager.current='screen_menu2'
font_size:30
Button:
text:"Check sales"
on_press:
root.manager.current='screen_menu3'
app.Menu3.updatesales()
font_size:30
Button:
text:"Data log"
on_press:root.manager.current='screen_menu4'
font_size:30
<Screen1>:
f_slot:slot
f_name:name
f_price:price
f_amount:amount
enter:enter
FloatLayout:
Label:
text:'Setprice & amount'
font_size:40
size:600,150
size_hint:(None,None)
pos:(0,370)
Label:
text:'Slot : '
font_size:30
size:600,150
size_hint:(None,None)
pos:(-20,300)
TextInput:
id:slot
multiline:False
focus: True
input_filter:"int"
font_size:30
size:200,50
size_hint:(None,None)
pos:(450,350)
on_text_validate:
name.focus=True
Label:
text:'Name : '
font_size:30
size:600,150
size_hint:(None,None)
pos:(-10,220)
TextInput:
id:name
focus: False
multiline:False
font_size:30
size:200,50
size_hint:(None,None)
pos:(450,270)
on_text_validate:
price.focus=True
Label:
text:'Price : '
font_size:30
size:600,150
size_hint:(None,None)
pos:(-15,140)
TextInput:
id:price
multiline:False
input_filter:"int"
focus: False
font_size:30
size:200,50
size_hint:(None,None)
pos:(450,190)
on_text_validate:
amount.focus=True
Label:
text:'Amount : '
font_size:30
size:600,150
size_hint:(None,None)
pos:(0,60)
TextInput:
id:amount
multiline:False
input_filter:"int"
font_size:30
focus: False
size:200,50
size_hint:(None,None)
pos:(450,110)
on_text_validate:root.setprice()
Button:
id:back
background_normal:'back.png'
size:100,93
size_hint:(None,None)
pos:(80,20)
on_press:root.manager.current='screen_mainmenu'
Button:
id:enter
text:'Enter'
size:250,50
size_hint:(None,None)
pos:(430,30)
font_size:30
focus:False
on_press:root.setprice()
<Screen2>:
FloatLayout:
Label:
text:'Motor'
font_size:40
size:600,150
size_hint:(None,None)
pos:(-140,370)
Button:
text:"Motor log"
#on_press:root.manager.current='screen_'
size:600,120
size_hint:(None,None)
font_size:30
pos:(100,275)
Button:
text:"Test Motor"
#on_press:root.manager.current='screen_three'
size:600,120
size_hint:(None,None)
font_size:30
pos:(100,150)
Button:
background_normal:'back.png'
size:100,93
size_hint:(None,None)
pos:(80,20)
on_press:root.manager.current='screen_mainmenu'
<Screen3>
id:Menu3
FloatLayout:
Label:
text:'Check sales'
font_size:40
size:600,150
size_hint:(None,None)
pos:(-90,350)
Label:
text:'Total sales : '
font_size:30
size:250,100
size_hint:(None,None)
pos:(100,300)
Label:
id:ttsales
text:Menu3.fsales
font_size:30
size:250,100
size_hint:(None,None)
pos:(100,350)
Button:
text:'More'
font_size:20
size:80,60
size_hint:None,None
pos:(500,320)
Button:
text:'Clear sales'
font_size:30
size:600,100
size_hint:(None,None)
pos:(100,200)
Button:
background_normal:'back.png'
size:100,93
size_hint:(None,None)
pos:(80,20)
on_press:root.manager.current='screen_mainmenu'
<Screen4>
FloatLayout:
Label:
text:'Data log'
font_size:40
size:600,150
size_hint:(None,None)
pos:(-125,350)
Button:
text:'Sales report'
font_size:30
size:600,100
size_hint:(None,None)
pos:(100,280)
Button:
text:'Hot product sales'
font_size:30
size:600,100
size_hint:(None,None)
pos:(100,170)
Button:
background_normal:'back.png'
size:100,93
size_hint:(None,None)
pos:(80,20)
on_press:root.manager.current='screen_mainmenu'
<Manager>:
id:screen_manager
screen_mainmenu:screen_mainmenu
screen_menu1:screen_menu1
screen_menu2:screen_menu2
screen_menu3:screen_menu3
screen_menu4:screen_menu4
screen_menu21:screen_menu21
screen_menu22:screen_menu22
Mainscreen:
id:screen_mainmenu
name:'screen_mainmenu'
manager:screen_manager
Screen1:
id:screen_menu1
name:'screen_menu1'
manager:screen_manager
Screen2:
id:screen_menu2
name:'screen_menu2'
manager:screen_manager
Screen3:
id:screen_menu3
name:'screen_menu3'
manager:screen_manager
Screen4:
id:screen_menu4
name:'screen_menu4'
manager:screen_manager
Screen21:
id:screen_menu21
name:'screen_menu21'
manager:screen_manager
Screen22:
id:screen_menu22
name:'screen_menu22'
manager:screen_manager
So if you want something to happen in Screen3
while working in Screen1
- here's how you can achieve it.
self.manager.get_screen('screen3').ids.labelid.text = 'NewText'
the above example code can be in the event of textinput
of screen1