簡體   English   中英

將py文件中的變量分配給kv文件中的標簽?

[英]Assign a variable from py file to a label in kv file?

我想知道是否有一種方法可以將我在 .py 文件中創建的變量分配到 .kv 文件中的Label中? 有問題的變量是設置為 0 的cart ,我想創建一個在cart更改值時更新的Label 我試過將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:
        

您應該為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)

然后可以在kv引用該Property

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM