尝试切换变量时出现错误状态值错误

问题描述 投票:0回答:1

我被这段代码困住了。我收到错误状态值(_tkinter.TclError:错误状态值“SkyBlue1”:必须正常、隐藏或禁用),但我不确定出了什么问题。有人可以建议吗?

from tkinter import HIDDEN, NORMAL, Tk, Canvas

def toggle_eyes():
    current_color = c.itemcget(eye_left, 'fill') #check eye - white is open, blue is closed
    new_color = c.body_color if current_color == 'white' else 'white' #sets eye to opposite value
    current_state = c.itemcget(pupil_left, 'state')
    new_state = NORMAL if current_state == HIDDEN else HIDDEN
    print(new_state)
    c.itemconfigure(pupil_left, state=new_state)
    c.itemconfigure(pupil_right, state=new_state)
    c.itemconfigure(eye_left, state=new_color)
    c.itemconfigure(eye_right, state=new_color)

def blink():
    toggle_eyes() #close the eyes
    root.after(250, toggle_eyes) #wait 250 milliseconds and open the eyes
    root.after(3000, blink) #wait 3000 milliseconds, then blink again
    
root = Tk()
c = Canvas(root, width=400, height=400)
#sets the canvas size

c.configure(bg='dark blue', highlightthickness=0)
#sets the background color

c.body_color = 'SkyBlue1'
body = c.create_oval(35, 20, 365, 350, outline=c.body_color, fill=c.body_color)
ear_left = c.create_polygon(75, 80, 75, 10, 165, 70, outline=c.body_color, fill=c.body_color)
ear_right = c.create_polygon(255, 45, 325, 10, 320, 70, outline=c.body_color, fill=c.body_color)
foot_left = c.create_oval(65, 320, 145, 360, outline=c.body_color, fill=c.body_color)
foot_right = c.create_oval(250, 320, 330, 360, outline=c.body_color, fill=c.body_color)
eye_left = c.create_oval(130, 110, 160, 170, outline='black', fill='white')
pupil_left = c.create_oval(140, 145, 150, 155, outline='black', fill='black')
eye_right = c.create_oval(230, 110, 260, 170, outline='black', fill='white')
pupil_right = c.create_oval(240, 145, 250, 155, outline='black', fill='black')
mouth_normal = c.create_line(170, 250, 200, 272, 230, 250, smooth=1, width=2, state=NORMAL)
#make the pet

c.pack()
#arranges components in the Tkinter window

root.after(1000, blink)
#blink after 1 second of starting the program

root.mainloop()
#starts the function that listens for input events like mouse clicks

我尝试先将变量设置为正常或隐藏。我还尝试使用打印语句来确定问题发生的位置。在我看来, current_state 是一个空值,尽管我不明白为什么。宠物眨眼一次,但似乎下次调用该函数(再次眨眼)时就会发生错误。

有什么建议吗?谢谢!

variables tkinter state
1个回答
0
投票

我想你想在以下两行设置填充颜色:

c.itemconfigure(eye_left, state=new_color)
c.itemconfigure(eye_right, state=new_color)

但是您使用了错误的关键字

state
。应使用
fill
来代替:

c.itemconfigure(eye_left, fill=new_color) # used fill keyword
c.itemconfigure(eye_right, fill=new_color) # used fill keyword
© www.soinside.com 2019 - 2024. All rights reserved.