2017-03-22 17 views
0

UPキーを押した後、コードが赤い楕円形になってから一定時間後にコードを削除する必要があります。しかし、赤い円が残っています。 UPキーを押してからこの円を赤色にしてから、緑色に戻したいと思っています。私は何を逃したのですか?Pythonのtkinterの問題です。 delコマンドのトラブル

#!/usr/bin/env python 

import Tkinter 
from Tkinter import Tk, Canvas, Frame, CENTER 
import time 

root = Tkinter.Tk() 
root.geometry("300x200") 
root.title("gui") 

gpio_01 = "green" 

def gpio_trigger_up(event): 
    for i in range(2): 
     print "Move Forward" 
     time.sleep(0.1) 
    for i in range(1):  
     print "Stop" 
     led_01 = gpio.create_oval(160,10,190,40, fill="red") 
     return led_01 
     time.sleep(1) 
     del led_01 
     time.sleep(0.1) 

gpio = Canvas() 
textfont = "Helvetica" 
gpio.create_oval(160,10,190,40, fill=(gpio_01)) 
gpio.pack() 

root.bind("<Up>", gpio_trigger_up) 

root.mainloop() 
+1

あなたはhttp://effbot.org/tkinterbook/canvas([ 'canvas.delete']を使用し、キャンバスの項目を削除するには、' del'を使用していません.htm#Tkinter.Canvas.delete-method)。あなたの問題は「この行をその行と置き換える」という簡単な解決策ではないので、これはコメントであり、答えではありません。一般に、Tkinterは 'sleep'とうまくやっていません。適切な時間遅れのある振る舞いを得るために、(root.after()を含む)大規模な再設計を行う必要があります) – Kevin

答えて

0

なぜled_01を返していますか?それは機能から壊れます。そして、ライン

del led_01 

これは決して達成されません。 return文を削除します。

さらに、あなたはまた、

gpio.delete(led_01) 

に削除行を変更する必要があり、これが答えであることについて申し訳ありませんが、私がコメントするのに十分な担当者を持っていません。

+0

私はコードを修正しましたが、まだ赤い円は0.5秒間赤く点滅していません。 –

+0

'コード'(DEFクリア(): gpio.delete( "すべて") 印刷 リターンgpio.create_oval(160,10,190,40 "すべて削除"、塗りつぶし=(gpio_01)) デフgpio_trigger_up(イベント) : led_01_status = 1 プリント "前進" ならled_01_status> 0: gpio.create_oval(160,10,190,40 = "赤" を埋める) time.sleep(0.5) プリントled_01_status印刷「led_01状態であります led_01_status「ON = 0 場合led_01_status == 0: クリア() time.sleep(0.2) GPIO =キャンバス() gpio.create_oval(160,10,190,40、fill =(gpio_01)) gpio.pack() root.bind( ""、gpio_trigger_up)) 'code' –

0

これは私の問題を解決しました:

def gpio_trigger_up(event): 
    print "Move Forward" 
    led_01 = gpio.create_oval(160,10,190,40, fill="red") 
    gpio.update() 
    time.sleep(0.3) 
    gpio.delete(led_01)