【发布时间】:2014-08-05 20:42:15
【问题描述】:
我在 Python 2.7.3 和 Kivy 1.8.0 中使用以下函数来淡入 Grid 小部件:
def __init__(self, **kwargs):
# ...Init parent class here...
self.grid.opacity = 0.0
Clock.schedule_interval(self.show, 1 / 10)
def show(self, value):
if self.grid.opacity == 1.0:
return False
else:
self.grid.opacity += 0.1
show() 被无限执行,self.grid.opacity == 1.0 总是返回 False,所以调度器永远不会移除函数。
我认为,并且文档说,opacity 是 NumericProperty,默认为 1.0,但我在调用 show() 之前更改了它的值。
这是我尝试过的:
if self.grid.opacity == NumericProperty(1.0):
if float(self.grid.opacity) == 1.0:
它不起作用。另外,我确定self.grid.opacity 是1.0 并且type() 在我进行比较之前检索float。
这行得通:
if str(self.grid.opacity) == "1.0":
但显然我不喜欢这种解决方案。
有什么想法吗?
【问题讨论】:
-
有很多资源可以解释浮点数及其不精确性。您是否搜索过 SO(甚至使用谷歌)?
-
这并不意味着
0.1 + 0.1 + 0.1 ... == 1.0 -
我认为这被标记为错误的副本。 stackoverflow.com/questions/5595425/… 在这里更相关。对于这两个问题,也没有人在 Python 中提到 epsilon。
-
@cdonts:您可能会感到困惑,因为您查看的是
str(somenumber)而不是repr(somenumber)。尝试print(repr(self.grid.opacity), self.grid.opacity-1)说服自己您正在查看 0.9999999999999999。
标签: python python-2.7 kivy