【问题标题】:How to use a looping function to update python Kivy application如何使用循环函数更新 python Kivy 应用程序
【发布时间】:2019-08-26 21:37:39
【问题描述】:

我创建了一个基于循环函数的程序。每次循环时,我都想更新屏幕中的两个标签。问题是我使用一个按钮来调用该函数,并且在函数停止执行之前它不会更新标签。以免我有一个标签,我调用一个从 0 到无穷大的循环函数。我希望标签在每个数字中都更新。这可能吗?

编辑:使用 Clock.schedule_interval(function, time) (time in seconds) 解决的问题只是一个简单的应用程序,每秒添加一个数字并将其显示到屏幕上

代码:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.clock import Clock
from time import sleep


class Window(GridLayout):
    def __init__(self, **kwargs):
        super(Window, self).__init__(**kwargs)
        self.cols = 1
        self.cnt = 0
        self.btn = Button(text='Start')
        self.add_widget(self.btn)
        self.btn.bind(on_press=self.pressed)
        self.lbl = Label()
        self.add_widget(self.lbl)

    def starting(self, instance):
        self.lbl.text = str(self.cnt)
        self.cnt += 1
        sleep(1)

    def pressed(self, instance):
        Clock.schedule_interval(self.starting, 0)


class MainApp(App):
    def build(self):
        return Window()


if __name__ == '__main__':
    MainApp().run()

【问题讨论】:

  • 发布代码..
  • 到目前为止你做了什么?你的尝试出了什么问题?请参阅此链接了解如何创建minimal reproducible example

标签: python function loops kivy


【解决方案1】:

您编写的代码开始循环,然后在循环完成之前什么都不做。相反,您需要编写循环一次的代码,然后让 gui 更新,然后在一段时间后再次运行。

这很简单,使用Clock.schedule_interval

Clock.schedule_interval(your_function, time_delta)  # time_delta is in seconds, the function is run whenever this amount of time has elapsed

your_function 应该执行一次循环迭代。

【讨论】:

  • 我可以在函数结束后立即重复该函数还是指定一个间隔?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多