отсутствует 1 обязательный позиционный аргумент dt - PullRequest
0 голосов
/ 24 мая 2019

Я хочу просто отобразить каждый шаг на этикетке с помощью этого kivy.clock пакет

class MainWindow(BoxLayout):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
    count=0
    def my_callback(self):
        global count
        count +=1
        us= self.ids.tet

        if count == 10:
            us.text=count
            return False
        print("call back is called")
        Clock.schedule_interval(self.my_callback, 1)

  count +=1

NameError: имя 'count' не определено

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Связывание кнопок - событие on_press / on_release

Как я могу связать функцию my_callback с событием кнопки

Решение - Событие on_press кнопки

Следующеефрагменты показывают, как связать событие on_press с обратным вызовом.

Snippets - файл kv

Button:
    text: 'Invoke method'
    on_press: root.btn_callback(self)

Snippets - файл py

def btn_callback(self, instance):
    print(f"\nButton.text={instance.text}")

Использование Kivy Clock - вызов метода callback ()

При использовании Объект Kivy Clock Чтобы запланировать вызов метода без использования функции lambda, необходимо объявить позиционный аргумент, dt (означает delta-time).

Snippets

def my_callback(dt):
    print(dt)

Clock.schedule_interval(my_callback, 1)    # call callback every 1 second

или

def my_callback():
    print("my_callback called")

Clock.schedule_interval(lambda dt: callback(), 1)    # call callback every 1 second

Пример

В следующем примере показано отображение счетчика, определенного как атрибут класса.

main.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.properties import NumericProperty
from kivy.lang import Builder

Builder.load_string("""
<MainWindow>:
    Label:
        id: tet
        font_size: sp(50)
    Button:
        text: 'Invoke method'
        on_press: root.btn_callback(self)
""")


class MainWindow(BoxLayout):
    count = NumericProperty(0)

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        Clock.schedule_interval(self.my_callback, 1)

    def my_callback(self, dt):
        print(f"my_callback is called: count={self.count}, dt={dt}")
        self.count += 1

        if self.count == 10:
            self.ids.tet.text = str(self.count)

    def btn_callback(self, instance):
        print(f"\nButton.text={instance.text}\n")


class TestApp(App):

    def build(self):
        return MainWindow()


if __name__ == "__main__":
    TestApp().run()

Выход

Result

0 голосов
/ 24 мая 2019

Попробуйте это-

class MainWindow(BoxLayout):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
    def my_callback(self):
        global count
        count +=1
        us= self.ids.tet

        if count == 10:
            us.text=count
            return False
        print("call back is called")
        Clock.schedule_interval(self.my_callback, 1)

count = 0

Вы должны определить count=0 вне создаваемого вами класса, и, сказав global count, вы делаете эту переменную глобальной, что означает, что теперь ваша функция можетотредактируйте переменную в глобальной области видимости.Вам следует больше узнать о области видимости в Google, если вы хотите его изучить.

Это может быть полезно для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...