2017-11-20 1 views
1

私はカメのクリックされたポイントの座標に基づいて値が割り当てられた変数の値を表示しようとしています。なぜonscreenclick()とmainloop()の間の文が実行されないのですか?

import turtle as t 
position=0 
j=0 
def get(a,b): 
    print("(", a, "," ,b,")") 
    global position 
    if b>0: 
     if a<0: 
      position=1 
     else: 
      position=2 
    else: 
     if a<0: 
      position=3 
     else: 
      position=4 

def main(): 
    global j 
    j = j+1 
    t.onscreenclick(get) 
    print(position) 
    t.mainloop() 

main() 

が、何も実行されますt.onscreenclick()t.mainloop()間(私は他の関数などを呼び出すような他のものを試してみましたか)?

答えて

0

onscreenclickあなたのクリックを待つことはありません。クリックすると、実行する必要のある機能はmainloopに通知されます。 mainloopは、すべてのものを行います - それは

など、メインウィンドウを作成し、オペレーションシステムからのマウス/キーボードイベントを取得し、onscreenclick/ontimerの/ etcに割り当てられた機能を実行し、ウィンドウ内の要素/ウィジェットにイベントを送信し、画面上の要素を再描画します。そのため、が実行された後にも、mainloopウィンドウが開きます。
は、あなたはそれをクリアするためのget()

import turtle as t 

# --- functions --- 

def get(x, y): 

    print("(", x, ",", y, ")") 

    if y > 0: 
     if x < 0: 
      position = 1 
     else: 
      position = 2 
    else: 
     if x < 0: 
      position = 3 
     else: 
      position = 4 

    print('pos:', position) 

# --- main --- 

# inform mainloop what function use when you click 
t.onscreenclick(get) 

# start "the engine" (event loop) 
t.mainloop() 
+0

感謝の内側に印刷することがあります。しかし、すべてのクリックの後にパラメータとしてpositionを持つ別の関数を使用したい場合、get()内でその関数を呼び出す必要がありますか、それとも別の方法がありますか? –

+0

はい、 'get()'で使用する必要があります。それは最も自然な方法です。 – furas

関連する問題