Jestem nowy w Kivy i próbuję wdrożyć wózek na zakupy do mojej aplikacji. Mam zmienną o nazwie cart i jest ustawiony na 0. Chcę dodać do zmiennej, gdy naciskam przycisk, ale kiedy to robię, otrzymuję ten błąd AssertionError: 7 is not callable. Dlaczego dokładnie otrzymuję ten błąd i jak mogę to naprawić?

Próbowałem kilku rzeczy, jak dodanie polecenia global do cart i umieszczenie zmiennej w klasie FirstScreen, ale oboje podają ten sam błąd. Jestem pewien, że jest to coś prostego, że brakuje, ale jakakolwiek pomoc zostałaby zaskarżona!

Tutaj przykładowy kod do odtworzenia problemu.

Plik .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.core.window import Window
from kivy.properties import ObjectProperty
from kivy.uix.image import Image
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.popup import Popup

cart = 0

class FirstScreen(Screen):
    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 = cart + 7 ))
        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()

Plik .kv.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()
0
Slender 29 październik 2020, 17:29

1 odpowiedź

Najlepsza odpowiedź

Możesz wykonać to, ustawienie on_release do metody przyrostowej cart:

sizepopup.add_widget(Button(text="Small", font_name="Gothic", size_hint=(1, 0.15), pos_hint={"x": 0, "y": 0.6}, on_release=self.increment_cart))

Następnie dodaj tę metodę klasy FirstScreen:

def increment_cart(self, button):
    global cart
    cart += 7
    print('cart =', cart)
0
John Anderson 29 październik 2020, 18:46