'main_loop'関数whileループは5秒ごとにself.i値をインクリメントせず、 'run'関数は1秒ごとにself.mycounter値を減少させません。kivy python時計スケジュールアップデート
なぜですか?
私は間違っていますか?
私はtime.sleepを使いたくありません。
class MyThread(BoxLayout):
stop = []
timer = []
times = []
i = NumericProperty(0)
mycounter = NumericProperty(0)
def incrementi(self, *args):
self.i += 1
def decrementcounter(self,*args):
self.mycounter -= 1
def run(self):
self.mycounter = 30
while not self.stop:
self.timer.append(self.mycounter)
Clock.schedule_interval(self.decrementcounter, 1.0)
self.times.append(self.mycounter)
return self.mycounter
def main_loop(self):
self.i = 0
while True:
Clock.schedule_interval(self.incrementi, 5.0)
if self.i == 2:
self.mycounter = 30
threading.Thread(target = self.run).start()
if self.i == 5:
self.stop.append('dummystring')
if self.i == 6:
self.stop.pop(0)
self.timer = []
self.ids.lbl.text = "{}".format(self.i)
if self.i == 7:
self.i = 0
def read_it(self):
threading.Thread(target = self.main_loop).start()
class MyApp(App):
def build(self):
self.load_kv('thread.kv')
return MyThread()
if __name__ == "__main__":
app = MyApp()
app.run()
kivy.pv
<MyThread>:
Button:
text: "start program"
on_release: root.read_it()
Label:
id: lbl
text: "current step"
font_size: 50
whileループが戻るまで、Kivyではスレッドがブロックされるまで何も起こりません。定期的にコードを実行するには、時計スケジュールを使用します。 – inclement
しかし、whileループにスレッドがあります。私はself.iが2と等しい場合にスレッドを開始します...クロックでループ 'x'秒間呼び出すことはできません...あなたは何を提案してください? – BlueDog
私はこれが時計を介して関数を定期的に呼び出すのをなぜ妨げるのかわかりませんが、本当にこのようにしたい場合は関数をスレッドに入れてください。 – inclement