将py文件中的变量分配给kv文件中的标签?

时间:2020-11-02 16:16:51

标签: python variables kivy

我想知道是否可以将在.py文件中创建的变量分配给.kv文件中的Label?有问题的变量是cart,该变量设置为0,我想创建一个Label,该变量在cart更改值时更新。我尝试将root.cartapp.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:
        

1 个答案:

答案 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}