我正在为学校制作这个涉及到覆盆子pi显示数据的项目。我正在使用的代码刷新(并且需要刷新)非常快,但我需要一种方法让用户停止输出,我认为这需要某种关键事件。问题是,我是Python的新手,我无法弄清楚如何使用turtle.onkey()退出while循环。我找到了这段代码:
import turtle
def quit():
global more
more = False
turtle.onkey(quit, "Up")
turtle.listen()
more = True
while more:
print("something")
哪个不起作用。我测试过了。如何使这项工作,还是有另一种方法可以在不中断程序流程的情况下获得用户输入?
答案 0 :(得分:1)
while循环在线程上运行 检查此代码
import threading
def something():
while more:
print("something")
th = threading.Thread(something)
th.start()
答案 1 :(得分:0)
您可能正在尝试在交互式IPython shell中运行代码。这不起作用。但是,裸的Python repl shell可以工作。
在这里,我找到了一个试图将乌龟带到IPython的项目:https://github.com/Andrewkind/Turtle-Ipython。我没有对它进行测试,而且我还不确定这是一个比仅使用未加工的shell更好的解决方案。
答案 2 :(得分:0)
避免Python龟图形程序中的无限循环:
more = True
while more:
print("something")
您可以有效地阻止触发事件,包括用于停止循环的事件。相反,使用计时器事件来运行代码并允许其他事件触发:
from turtle import Screen
more = True
counter = 0
def stop():
global more
more = False
def start():
global more
more = True
screen.ontimer(do_something, 100)
def do_something():
global counter
print("something", counter)
counter += 1
if more:
screen.ontimer(do_something, 100)
screen = Screen()
screen.onkey(stop, "Up")
screen.onkey(start, "Down")
screen.listen()
start()
screen.mainloop()
我已经为您的计划添加了一个计数器,这样您就可以更轻松地查看“'语句停止,我在向下键上添加了重新启动,因此您可以重新启动它们。控件应始终到达mainloop()
(或done()
或exitonclick()
),以便为所有事件处理程序提供执行机会。一些无限循环允许事件触发,但它们通常会调用乌龟方法,允许它在某些时候控制,但仍然是错误的方法。
答案 3 :(得分:-4)
你可以让你循环检查这样的文件:
def check_for_value_in_file():
with open('file.txt') as f:
value = f.read()
return value
while check_for_value_in_file() == 'the right value':
do_stuff()