将py文件中的变量指定给kv文件中的标签?

2024-09-30 08:25:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有一种方法可以将我在.py文件中创建的变量分配到.kv文件中的Label中?所讨论的变量是cart,设置为0,我想创建一个Label,当cart更改值时更新。我尝试过在标签文本中添加root.cartapp.cart,但它们似乎不起作用。任何帮助都将不胜感激

下面是我为实现目标而创建的一个简单示例代码

.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:
        

Tags: 文件textfromimportselfsizebuttonlabel
1条回答
网友
1楼 · 发布于 2024-09-30 08:25:59

对于cart变量,应该使用NumericProperty,而不是使用global。如果引用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}

相关问题 更多 >

    热门问题