gpt4 book ai didi

python - 如何在 kivy 应用程序中同时运行 Clock.schedule_interval 实例?

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:14 26 4
gpt4 key购买 nike

我有一个类,它在 init 中使用 Clock.schedule_interval 不断更改背景颜色。我想同时创建该类的多个实例;但是,我认为这意味着创建多个线程,这是不允许的?我想要的是上半部分改变颜色,而下半部分改变不同的颜色。发生的情况只是下半部分正在改变颜色,而上半部分是黑色的。这是代码。

/teacher/main.py 文件是

from kivy.app import App
from kivy.clock import Clock
from kivy.graphics import Color
from kivy.properties import NumericProperty, ReferenceListProperty
from kivy.uix.gridlayout import GridLayout
from kivy.uix.widget import Widget

from random import randint

class ChangingBackgroundColor(Widget):
r = NumericProperty(.5)
g = NumericProperty(.5)
b = NumericProperty(.5)
a = NumericProperty(1)
color = ReferenceListProperty(r, g, b, a)

def __init__(self,**kwargs):
super(ChangingBackgroundColor, self).__init__(**kwargs)
Clock.schedule_interval(self.update, .2)

def update(self, dt):

position = randint(0,2) # change to randint(0,3) to change a as well
direction = randint(0,1)

if direction == 0:
if self.color[position] == 0:
self.color[position] += .1
else:
self.color[position] -= .1
elif direction == 1:
if self.color[position] == 1:
self.color[position] -= .1
else:
self.color[position] += .1

self.color[position] = round(self.color[position], 2)
self.canvas.add(Color(self.color))

class TeachingApp(App):

def build(self):
grid = GridLayout(rows=2)
a = ChangingBackgroundColor()
b = ChangingBackgroundColor()
grid.add_widget(a)
grid.add_widget(b)
return grid

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

/teacher/teaching.kv 文件是

#:kivy 1.0.9

<ChangingBackgroundColor>:
canvas:
Color:
rgba: self.color
Rectangle:
size: self.width, self.height

我看了这里,对线程问题仍然很模糊。 Clock documentation .

这是我提交的第一个问题,因此如果我在问题提交方面做错了什么,请告诉我。

最佳答案

你的代码很好,使用 Clock.schedule_interval 不使用线程(它都在主线程中),即使你确实有它们,也可以从其他线程使用它们,尽管回调仍然会在主线程中发生。

问题是您在 kv 中的矩形条目需要具有:

pos: self.pos

如果没有这个,两个矩形的默认位置都是 (0, 0),因此第二个矩形位于第一个矩形的上方,并且屏幕的上半部分是黑色的。

关于python - 如何在 kivy 应用程序中同时运行 Clock.schedule_interval 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35747331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com