Python Time.sleep()没有在正确的时间暂停吗?

Python Time.sleep()没有在正确的时间暂停吗?,python,tkinter,Python,Tkinter,您好,我已经使用python和tkinter创建了一个测验。按下每个选项后,我希望正确答案变为绿色,不正确答案变为红色,然后在下一个问题中恢复为默认值。这里的问题是,运行代码会在用户看到颜色之前将按钮恢复为默认值。为此,我尝试在函数中使用time.sleep(),但无论我在何处使用它,它似乎只是在按下按钮时暂停,然后进入下一个问题,没有看到任何颜色变化 下面是相关的代码 def entry(num): global score global x global count

您好,我已经使用python和tkinter创建了一个测验。按下每个选项后,我希望正确答案变为绿色,不正确答案变为红色,然后在下一个问题中恢复为默认值。这里的问题是,运行代码会在用户看到颜色之前将按钮恢复为默认值。为此,我尝试在函数中使用time.sleep(),但无论我在何处使用它,它似乎只是在按下按钮时暂停,然后进入下一个问题,没有看到任何颜色变化

下面是相关的代码

def entry(num):
   global score
   global x
   global count
   count +=1

   if Qa[x] == 1:
       option1.config(bg = "green")
       option2.config(bg = "red")
       option3.config(bg="red")
       option4.config(bg="red")
   elif Qa[x] == 2:
       option1.config(bg="red")
       option2.config(bg="green")
       option3.config(bg="red")
       option4.config(bg="red")

   elif Qa[x] == 3:
       option1.config(bg="red")
       option2.config(bg="red")
       option3.config(bg="green")
       option4.config(bg="red")
   elif Qa[x] == 4:
       option1.config(bg="red")
       option2.config(bg="red")
       option3.config(bg="red")
       option4.config(bg="green")
   if num == Qa[x]:
       score += 1
   x +=1
   if count <10:
       my_label.config(text = Qs[x])
       option1.config(text = (question_prompts[x])[1],bg = "SystemButtonFace",command = lambda: entry(1) )
       option2.config(text=(question_prompts[x])[2],bg = "SystemButtonFace",command = lambda: entry(2) )
       option3.config(text=(question_prompts[x])[3],bg = "SystemButtonFace",command = lambda: entry(3) )
       option4.config(text=(question_prompts[x])[4],bg = "SystemButtonFace",command = lambda: entry(4) )
   else:
       End_score =Label(text = "Well done you scored" +" "+ str(score)+" " +"out of 11", font = 40)
       End_score.place(relx=0.5,rely =0.5,anchor = CENTER)
   print(x,score, count, Qa[x])

def条目(num):
全球得分
全球x
全局计数
计数+=1
如果Qa[x]==1:
option1.config(bg=“绿色”)
option2.config(bg=“红色”)
option3.config(bg=“红色”)
选项4.config(bg=“红色”)
elif Qa[x]==2:
选项1.config(bg=“红色”)
option2.config(bg=“绿色”)
option3.config(bg=“红色”)
选项4.config(bg=“红色”)
elif Qa[x]==3:
选项1.config(bg=“红色”)
option2.config(bg=“红色”)
option3.config(bg=“绿色”)
选项4.config(bg=“红色”)
elif Qa[x]==4:
选项1.config(bg=“红色”)
option2.config(bg=“红色”)
option3.config(bg=“红色”)
option4.config(bg=“绿色”)
如果num==Qa[x]:
分数+=1
x+=1

如果count这里的问题是,在Tk返回其主循环之前,选项实际上不会改变颜色。只要您正在运行函数,主循环就无法提取新事件。您需要设置颜色,然后使用
root.after
在将来的某个时间点安排回调,此时您将重置为全绿色。

时间
sleep(5)
命令应该出现在您增加x(
x+=1
)的时间点。这是必须执行的代码的一部分,在返回系统按钮面之前必须执行。感谢@Tim Roberts,您让它变得非常容易理解。还有一个选项可以使用
root.update()
并将睡眠放在最后,因为这不是建议的方法谢谢@MartinWettstein的建议,但我担心这不会让按钮改变颜色