缺少1个必需的位置参数dt

时间:2019-05-24 06:42:34

标签: python kivy

我想借助此功能仅在标签上显示计数的每个增量 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 :(得分:0)

试试这个-

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上找到更多有关范围的信息。

This might be helpful to begin with.

答案 1 :(得分:0)

按钮绑定-on_press / on_release事件

  

如何将my_callback函数绑定到按钮事件

解决方案-按钮on_press事件

以下代码片段显示了如何将on_press事件绑定到回调。

摘要-kv文件

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

代码段-py文件

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

使用Kivy Clock-调用callback()方法

在使用Kivy Clock object来调度不使用lambda函数的方法的调用时,必须声明一个位置参数dt(表示增量时间)。

摘要

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

示例

下面的示例说明如何显示定义为class属性的计数器。

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