Reputation: 53
How can I call a method from class Account in my kv file?
py file:
import kivy
kivy.require("1.10.1")
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
class Account():
def __init__(self,name, balance):
self.name = name
self.__balance__ = balance
def getBalance(self):
return (self.__balance__)
def setBalance(self, zmena):
self.__balance__ = self.__balance__+zmena
acc = Account("Account1", "1000")
class myWidget(Widget):
Builder.load_file("MP.kv")
class MainApp(App):
def build(self):
return myWidget()
if __name__ == "__main__":
MainApp().run()
kv file:
#:kivy 1.10.1
<Button>
background_color: 0.1, 0.1, 0.9, 0.9
font_size: 22
<Label>
background_color: 0.1, 0.1, 0.9, 0.9
font_size: 22
<myWidget>:
Label:
id: lb
text: "Account"
pos: root.width /2-self.width/2, root.top/2+200
Label:
id: lb1
text: "Account name"
pos: root.width /2-self.width/2, root.top/2+150
Label:
id: lb2
text: "balance" '''here i want call methot getBalance, but how?
pos: root.width /2-self.width/2, root.top/2+100
Label:
id: lb3
text: "Add/sub money"
pos: root.width /2-self.width/2, root.top/2+50
TextInput:
id: tp
text: "money"
pos: root.width /2-self.width/2, root.top/2-50
size_hint: .5, .25
Button:
id: btn1
text: "Confirm"
size_hint: .5, .25
pos: root.width /2-self.width/2, root.top/2-150
Upvotes: 0
Views: 7554
Reputation: 16011
if i add some money, how i update balance in Label lb2?
Use Kivy Properties e.g. StringProperty, because they produce events such that when an attribute of your object changes, all properties that reference that attribute are automatically updated.
import kivy
kivy.require("1.10.1")
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty, StringProperty
class Account():
def __init__(self, name, balance):
self.name = name
self.__balance__ = balance
def getBalance(self):
return (self.__balance__)
def setBalance(self, zmena):
self.__balance__ = self.__balance__ + zmena
class myWidget(Widget):
acc = ObjectProperty(None)
balance = StringProperty('')
def __init__(self, **kwargs):
super(myWidget, self).__init__(**kwargs)
self.acc = Account("Account1", 1008)
self.update_balance()
def update_balance(self):
self.balance = str(self.acc.getBalance())
Builder.load_file("MP.kv")
class MainApp(App):
def build(self):
return myWidget()
if __name__ == "__main__":
MainApp().run()
#:kivy 1.10.1
<Button>:
background_color: 0.1, 0.1, 0.9, 0.9
font_size: 22
<Label>:
background_color: 0.1, 0.1, 0.9, 0.9
font_size: 22
<myWidget>:
Label:
id: lb
text: "Account"
pos: root.width /2-self.width/2, root.top/2+200
Label:
id: lb1
text: "Account name"
pos: root.width /2-self.width/2, root.top/2+150
Label:
id: lb2
text: root.balance
pos: root.width /2-self.width/2, root.top/2+100
Label:
id: lb3
text: "Add/sub money"
pos: root.width /2-self.width/2, root.top/2+50
TextInput:
id: tp
hint_text: "money"
pos: root.width /2-self.width/2, root.top/2-50
size_hint: .5, .25
Button:
id: btn1
text: "Confirm"
size_hint: .5, .25
pos: root.width /2-self.width/2, root.top/2-150
on_release:
root.acc.setBalance(int(tp.text))
root.update_balance()
from kivy.properties import ObjectProperty
acc = ObjectProperty(None)
When the app start, acc is None. Therefore, we need to check for None to avoid error.
text: '' if root.acc is None else root.acc.getBalance()
import kivy
kivy.require("1.10.1")
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
class Account():
def __init__(self, name, balance):
self.name = name
self.__balance__ = balance
def getBalance(self):
return (self.__balance__)
def setBalance(self, zmena):
self.__balance__ = self.__balance__ + zmena
class myWidget(Widget):
acc = ObjectProperty(None)
def __init__(self, **kwargs):
super(myWidget, self).__init__(**kwargs)
self.acc = Account("Account1", "1000")
Builder.load_file("MP.kv")
class MainApp(App):
def build(self):
return myWidget()
if __name__ == "__main__":
MainApp().run()
#:kivy 1.10.1
<Button>:
background_color: 0.1, 0.1, 0.9, 0.9
font_size: 22
<Label>:
background_color: 0.1, 0.1, 0.9, 0.9
font_size: 22
<myWidget>:
Label:
id: lb
text: "Account"
pos: root.width /2-self.width/2, root.top/2+200
Label:
id: lb1
text: "Account name"
pos: root.width /2-self.width/2, root.top/2+150
Label:
id: lb2
text: '' if root.acc is None else root.acc.getBalance()
pos: root.width /2-self.width/2, root.top/2+100
Label:
id: lb3
text: "Add/sub money"
pos: root.width /2-self.width/2, root.top/2+50
TextInput:
id: tp
text: "money"
pos: root.width /2-self.width/2, root.top/2-50
size_hint: .5, .25
Button:
id: btn1
text: "Confirm"
size_hint: .5, .25
pos: root.width /2-self.width/2, root.top/2-150
Upvotes: 3