【发布时间】:2016-10-29 01:03:47
【问题描述】:
def gate(i):
input.bind('<Return>', gate(input.get('end-1c linestart', 'end-1c lineend')))
inputDatabase.run(i)
input.bind('<Return>', gate(input.get('end-1c linestart', 'end-1c lineend')))
input 是一个 tkinter 文本对象。
我正在制作一个控制台,以便当用户按下回车键时,它会获取文本对象中的最后一行。这需要永远发生。
给RecursionError: maximum recursion depth exceeded。我怎样才能使这项工作?我尝试过使用线程,但它们是无限的,而且因为它们共享文本对象的资源(我认为),它们必须使用锁,我不知道该怎么做。如果有人能解释如何使用锁、线程或任何非常有用的东西。谢谢!还有两件事:请不要建议更改系统递归深度,如果答案是程序性的而不是严重面向对象的,我更愿意。不过也没关系。再次,提前致谢。
【问题讨论】:
-
绑定期望函数名 - 这意味着没有 () 和参数。现在 Python 在开始时运行
gate()以将结果绑定到<Return>但在gate()内部是另一个gate()所以你得到递归。你为什么在gate()里面使用gate()??? -
@furas 让它永远运行
-
它将永远运行(或直到
maximum recursion depth exceeded),但我不知道你为什么需要这种结构。 -
您只能绑定一次
<return>,它将永远有效。所以你不需要在gate()内使用bind,但你需要`lambda 来分配带有参数的函数。但我认为你可以在没有争论的情况下做到这一点。
标签: python-3.x loops tkinter key-bindings