试图让外星人的照片在按钮不起作用的情况下闪烁

2024-09-29 19:18:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我已经做了一个外星人,我想让用户能够偷外星人的帽子,让外星人打嗝,让外星人眨眼,并能够移动外星人的眼球。到目前为止,我已经使它能够控制他的眼球,但眨眼是不工作的。我已经移除了时间。睡眠(1) 在定义blink2的时候,这并没有改变什么。我怎样才能让外星人眨眼。任何帮助都将不胜感激。你知道吗


Tags: keytextmovedefcreatewindowfillwords
1条回答
网友
1楼 · 发布于 2024-09-29 19:18:21

在您的函数blink2中,它从不要求刷新画布,因此您的外星人似乎从不闪烁。你知道吗

您可以通过删除time.sleep(1),并使用after进行计时来解决这个问题。你知道吗

要实现这一点,blink2可以如下所示:

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

注意,使用root作为Tk()的引用通常也是惯例。你知道吗

相关问题 更多 >

    热门问题