Вопрос № 2
если я добавлю немного денег, как мне обновить баланс в Label lb2?
Решение № 2
Используйте Kivy Properties, например. StringProperty, потому что они генерируют события, так что при изменении атрибута вашего объекта все свойства, которые ссылаются на этот атрибут, автоматически обновляются.
Пример # 2
main.py
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()
MP.kv
#: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()
Выход № 2
Решение
Python Script - main.py
- Добавить оператор импорта для Kivy ObjectProperty, например.
from kivy.properties import ObjectProperty
- Объявите объектный объект Kivy, например,
acc = ObjectProperty(None)
- Реализовать метод конструктора для myWidget ()
файл кв
Когда приложение запускается, acc None. Поэтому нам нужно проверить None, чтобы избежать ошибки.
text: '' if root.acc is None else root.acc.getBalance()
* * Пример тысячи сорок четыре * * 1045
main.py
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()
* * MP.kv тысяча сорок-девять
#: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
выход