我想知道是否可以将在.py文件中创建的变量分配给.kv文件中的Label
?有问题的变量是cart
,该变量设置为0,我想创建一个Label
,该变量在cart
更改值时更新。我尝试将root.cart
或app.cart
添加到Label的文本中,但它们似乎不起作用。任何帮助将不胜感激!
这是我为实现目标而创建的简单示例代码。
.py文件
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.properties import ObjectProperty, StringProperty
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.popup import Popup
cart = 0
class FirstScreen(Screen):
def LasagneSmall(self, button):
global cart
cart = cart + 7
print(cart)
def sizeSelection(self):
sizepopup = FloatLayout()
sizepop = Popup(title="Format", separator_color=[0.6, 0, 0, 1], content=sizepopup,title_font=("Gothic"), size_hint=(0.6, 0.6))
sizepopup.add_widget(Label(text="Choose a format", font_name="Gothic", pos_hint={"x": 0, "y": 0.4}))
sizepopup.add_widget(Button(text="Small", font_name="Gothic", size_hint=(1, 0.15), pos_hint={"x": 0, "y": 0.6}, on_release = self.LasagneSmall ))
sizepopup.add_widget(Button(text="Back", font_name="Gothic", size_hint=(0.8, 0.15), pos_hint={"x": 0.10, "y": 0}, on_release=sizepop.dismiss))
sizepop.open()
class WindowManager(ScreenManager):
pass
class exampleApp(App):
def build(self):
return WindowManager()
if __name__ == "__main__":
exampleApp().run()
.kv文件
<WindowManager>:
FirstScreen:
<FirstScreen>:
FloatLayout:
Button:
text: "Add to cart"
size_hint: 0.5,0.1
pos_hint: {"x": 0.25,"y":0.5}
on_release:
root.sizeSelection()
Label:
答案 0 :(得分:0)
您应该对变量global
使用NumericProperty
,而不要使用cart
。如果您将Property
引用为kv
中某个属性的值,则kv
将自动设置绑定以在Property
更改时更新该属性。这是FirstScreen
类的稍加修改的版本,该类对购物车使用了Property
:
# cart = 0
class FirstScreen(Screen):
cart = NumericProperty(0)
def LasagneSmall(self, button):
# global cart
self.cart += 7
print(self.cart)
然后可以在Property
中引用kv
:
<WindowManager>:
FirstScreen:
<FirstScreen>:
FloatLayout:
Button:
text: "Add to cart"
size_hint: 0.5,0.1
pos_hint: {"x": 0.25,"y":0.5}
on_release:
root.sizeSelection()
Label:
text: str(root.cart) # references the cart property
size_hint: 0.5,0.1
pos_hint: {"x": 0.25,"top":1}