2016-12-14 12 views
0

私はラズベリーパイにデータを表示することを含む学校のためのこのプロジェクトを作っています。私が使用しているコードは信じられないほど速くリフレッシュされ、リフレッシュする必要がありますが、出力を停止する方法が必要です。これは何らかのキーイベントを必要とします。問題は、私はPythonを初めて使い、turtle.onkey()でwhileループを終了する方法を理解できません。このコードが見つかりました:イベントでPythonのwhileループを終了するにはどうしたらいいですか?

import turtle 

def quit(): 
    global more 
    more = False 

turtle.onkey(quit, "Up") 
turtle.listen() 

more = True 
while more: 
    print("something") 

これは動作しません。私はそれをテストしました。この作業を行うにはどうすればよいですか、あるいはプログラムの流れを中断することなくユーザーの入力を得る別の方法がありますか?

答えて

-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() 
+1

これは全く質問に答えることはできません... – Chris

+0

申し訳ありませんが、ちょっと待ってください。私はレッスンを学びました。 – zemekeneng

+1

あなたの答えはまだOPの質問とは無関係です。 – kay

0

チャンスはあなたがインタラクティブIPythonシェルでコードを実行しようとしているということです。それは動作しません。しかし、裸のPythonのreplシェルが動作します。

ここで私はIPythonにカメをもたらすプロジェクトを見つけました:https://github.com/Andrewkind/Turtle-Ipython。私はそれをテストしていませんでしたが、これは単なるunsugaredシェルを使用するよりも優れた解決策であると確信していません。

1

スレッド チェックでは、ループの実行このコード

import threading 

def something(): 
    while more: 
     print("something") 

th = threading.Thread(something) 
th.start() 
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())になり、すべてのイベントハンドラに実行の機会が与えられます。いくつかの無限ループはイベントを発生させることができますが、通常はカメのメソッドを呼び出すことができますが、時間の制御は可能ですが、依然として誤ったアプローチです。

関連する問題