2017-09-28 1 views
0
from tkinter import * 
import time 
alien = Tk() 
alien.title("Alien") 
c = Canvas(alien, height=300, width=400) 
c.pack() 
body = c.create_oval(100, 150, 300, 250, fill="green") 
eye = c.create_oval(170, 70, 230, 130, fill="white") 
eyeball = c.create_oval(190, 90, 210, 110, fill="black") 
mouth = c.create_oval(150, 220, 250, 240, fill="red") 
neck = c.create_line(200, 150, 200, 130) 
hat = c.create_polygon(180, 75, 220, 75, 200, 20, fill="blue") 
def mouth_open(): 
    c.itemconfig(mouth, fill="black") 
def mouth_close(): 
    c.itemconfig(mouth, fill="red") 
def blink(): 
    c.itemconfig(eye, fill="green") 
    c.itemconfig(eyeball, state=HIDDEN) 
def unblink(): 
    c.itemconfig(eye, fill="white") 
    c.itemconfig(eyeball, state=NORMAL) 
def steal_hat(): 
    c.itemconfig(hat, state=HIDDEN) 
    c.itemconfig(words, text="GIVE ME MY HAT BACK") 
def burp(): 
    mouth_open() 
    c.itemconfig(words, text="Burp!!!") 
    time.sleep(1) 
    c.itemconfig(words, text="I'm an alien!") 
    mouth_close() 
def blink2(): 
    blink() 
    time.sleep(1) 
    unblink() 
def eye_control(event): 
    key = event.keysym 
    if key == "Up": 
     c.move(eyeball, 0, -1) 
    elif key == "Down": 
     c.move(eyeball, 0, 1) 
    elif key == "Left": 
     c.move(eyeball, -1, 0) 
    elif key == "Right": 
     c.move(eyeball, 1, 0) 
c.bind_all('<Key>', eye_control) 
words = c.create_text(200, 280, text="I'm an alien!") 
window = Tk() 
window.title("Options") 
btnBlink = Button(window, text="blink", command=blink2) 
btnBlink.pack() 
alien.mainloop() 
window.mainloop() 

J'ai fait un étranger et je veux faire de l'utilisateur soit en mesure de voler le chapeau de l'étranger, faire le burp étranger, faire un clin étranger et être capable de déplacer les globes oculaires de l'étranger. Jusqu'à présent, je l'ai fait en mesure de contrôler ses globes oculaires, mais le clignotement ne fonctionne pas. J'ai enlevé le time.sleep (1) dans la définition pour blink2 mais cela ne change vraiment rien. Comment je pourrais faire clignoter l'extraterrestre. Toute aide sera grandement appréciée.Essayer de faire une image d'un clignement étranger avec un bouton ne fonctionne pas

Répondre

0

Dans votre fonction blink2, il n'est jamais nécessaire d'actualiser le canevas, votre alien ne semble donc jamais clignoter.

Vous pouvez résoudre ce problème en supprimant time.sleep(1) et en utilisant after à la place.

Pour mettre en œuvre, blink2 pourrait ressembler à ceci:

def blink2(): 
    blink() 
    window.after(1000, unblink) # Timing is in milliseconds. 

Notez qu'il est convention généralement aussi d'utiliser root comme référence à Tk().

+0

Vous avez fait une petite erreur en essayant de passer le 'unblink' comme un rappel. Supprimez simplement les parenthèses redondantes. – CommonSense

+0

@CommonSense, vous avez raison - une erreur de débutant! – SneakyTurtle

+0

Merci pour l'aide. –