如何在事件中退出python中的while循环?

时间:2016-12-14 01:32:26

标签: python turtle-graphics

我正在为学校制作这个涉及到覆盆子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")

哪个不起作用。我测试过了。如何使这项工作,还是有另一种方法可以在不中断程序流程的情况下获得用户输入?

4 个答案:

答案 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()