如何从 .kv 文件中的 main.py 访问变量
How do I access a variable from my main.py in my .kv file
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.uix.label import Label
Balance = 0
Balance_string = str(Balance)
class MyWidget(Widget):
def ads(self):
global Balance
Balance += 0.25
Balance_string = str(Balance)
print(Balance_string)
return Balance_string
class BuzzMoneyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
BuzzMoneyApp().run()
** 我的 .kv 文件 **
<MyWidget>:
canvas:
Color:
rgb: (0, 150,0)
Rectangle:
pos: self.pos
size: self.size
Button:
center: self.parent.center
font_size: 14
height: 28
background_color: (1.0, 0.0, 0.0, 1.0)
text: "Earn money"
on_press:root.ads()
我想从我的 main.py 访问我的 .kv 文件中的 Balance 字符串变量,以便我可以在我的屏幕上显示它。
您可以在 kv
中轻松地从 python
引用 Properties
。这是您的代码的修改版本:
from kivy.app import App
from kivy.lang import Builder
from kivy.properties import NumericProperty, StringProperty
from kivy.uix.widget import Widget
# Balance = 0
# Balance_string = str(Balance)
class MyWidget(Widget):
Balance = NumericProperty(0)
Balance_string = StringProperty('0')
def ads(self):
self.Balance += 0.25
print(self.Balance_string)
def on_Balance(self, *args):
# update Balance_string whenever Balance changes
self.Balance_string = str(self.Balance)
class BuzzMoneyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
BuzzMoneyApp().run()
然后你可以在kv
中引用那些Properties
:
<MyWidget>:
canvas:
Color:
rgb: (0, 150,0)
Rectangle:
pos: self.pos
size: self.size
Button:
center: self.parent.center
font_size: 14
height: 28
background_color: (1.0, 0.0, 0.0, 1.0)
text: "Earn money"
on_press:root.ads()
Label:
text: root.Balance_string # root.Balance_string can be replaced with just str(root.Balance)
size_hint: None, None
size: self.texture_size
pos: 300, 200
color: 0,0,0,1
Properties
必须在 EventDispatcher
中定义(通常是 Widget
)。 on_Balance()
方法会在 Balance
Property
更改时自动触发,并更新 Balance_string
Property
。
如图所示,Balance_string
可以在 kv
中使用,只要 Balance_string
Property
发生变化,Label
就会更新。由于Balance_string
只是Balance
的字符串值,所以可以在kv
.
中将其剔除并替换为str(root.Balance)
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.uix.label import Label
Balance = 0
Balance_string = str(Balance)
class MyWidget(Widget):
def ads(self):
global Balance
Balance += 0.25
Balance_string = str(Balance)
print(Balance_string)
return Balance_string
class BuzzMoneyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
BuzzMoneyApp().run()
** 我的 .kv 文件 **
<MyWidget>:
canvas:
Color:
rgb: (0, 150,0)
Rectangle:
pos: self.pos
size: self.size
Button:
center: self.parent.center
font_size: 14
height: 28
background_color: (1.0, 0.0, 0.0, 1.0)
text: "Earn money"
on_press:root.ads()
我想从我的 main.py 访问我的 .kv 文件中的 Balance 字符串变量,以便我可以在我的屏幕上显示它。
您可以在 kv
中轻松地从 python
引用 Properties
。这是您的代码的修改版本:
from kivy.app import App
from kivy.lang import Builder
from kivy.properties import NumericProperty, StringProperty
from kivy.uix.widget import Widget
# Balance = 0
# Balance_string = str(Balance)
class MyWidget(Widget):
Balance = NumericProperty(0)
Balance_string = StringProperty('0')
def ads(self):
self.Balance += 0.25
print(self.Balance_string)
def on_Balance(self, *args):
# update Balance_string whenever Balance changes
self.Balance_string = str(self.Balance)
class BuzzMoneyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
BuzzMoneyApp().run()
然后你可以在kv
中引用那些Properties
:
<MyWidget>:
canvas:
Color:
rgb: (0, 150,0)
Rectangle:
pos: self.pos
size: self.size
Button:
center: self.parent.center
font_size: 14
height: 28
background_color: (1.0, 0.0, 0.0, 1.0)
text: "Earn money"
on_press:root.ads()
Label:
text: root.Balance_string # root.Balance_string can be replaced with just str(root.Balance)
size_hint: None, None
size: self.texture_size
pos: 300, 200
color: 0,0,0,1
Properties
必须在 EventDispatcher
中定义(通常是 Widget
)。 on_Balance()
方法会在 Balance
Property
更改时自动触发,并更新 Balance_string
Property
。
如图所示,Balance_string
可以在 kv
中使用,只要 Balance_string
Property
发生变化,Label
就会更新。由于Balance_string
只是Balance
的字符串值,所以可以在kv
.
str(root.Balance)