【问题标题】:Breaking Main loop in kivy (Freezing Screen)打破kivy中的主循环(冻结屏幕)
【发布时间】:2015-08-13 04:16:14
【问题描述】:

我得到并发出问题,当我将一个函数与一个运行良好的按钮绑定时,但是当我绑定一个其中有一个无限循环的函数时,屏幕冻结并且其他按钮不起作用,如下例所示......请给出我使用另一个按钮打破该循环的解决方案..

from kivy.uix.popup import Popup
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.stacklayout import StackLayout

class APPLICATION_START(FloatLayout):
    def __init__(self, **kwargs):
        super(MyApp, self).__init__(**kwargs)
        self.buone = Button(text="Start Loop",pos=(0,180),size=(470,90),size_hint=(None,None))
        self.logi.bind(on_release=self.loooop)
        self.exitbtn = Button(text="exit",pos=(0,90),size=(235,70),size_hint=(None,None))
        self.exitbtn.bind(on_press=exit)

    def loooop(self,instance):
        while True:
            # do any Activity

        #I want to break this loop when someone press on exit button

class MyApp(App):
    def build(self):
        return APPLICATION_START()

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

【问题讨论】:

  • 我对线程知之甚少,但没有使用循环创建一个新线程来执行此操作。
  • 如何?...可以给出示例代码
  • 为什么要使用无限循环?
  • 它是一个电子邮件炸弹应用程序......所以在无限循环中它会一直发送电子邮件,直到用户不停止应用程序

标签: android python-2.7 loops kivy


【解决方案1】:

在您的函数返回之前,gui 无法更新,但它不会。

为您的任务使用线程,或者如果它由一个短任务的多次重复组成,您可以通过Clock.schedule_interval(your_function, some_timestep) 重复运行它。

【讨论】:

  • Button.bind(on_press= Clock.schedule_interval(your_function, some_timestep) 对吗??
  • 没有。 Button.bind 需要一个函数作为参数,你必须创建一个函数来添加定时任务到时钟。
  • some_function(): Clock.schedule_interval(your_function, some_timestep) 对吗?
  • 请有人帮帮我
  • 如何在您的原始帖子中发布您的尝试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
相关资源
最近更新 更多