2017-03-22 87 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

你不使用'del'刪除畫布的項目,你可以使用['canvas.delete'](http://effbot.org/tkinterbook/canvas的.htm#Tkinter.Canvas.delete方法)。 (我將這個帖子發表爲評論而不是答案,因爲你的問題並沒有像「用這一行代替這條線」那樣容易解決。一般來說,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狀態是ON「 led_01_status = 0 if led_01_status == 0: clear() time.sleep(0.2) gpio = Canvas())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)