我是python的新手,我正在为Othello编程计算机播放器。我正在使用回调方法来查找鼠标单击板上的位置。我需要能够在回调过程中暂停一下,以便先显示玩家的移动,再显示计算机的移动。但是,目前,这两个动作同时发生,因此玩家看不到他/她的动作的结果。当我尝试time.sleep()
方法时,它只是延迟了整个回调的执行。
这是我的代码的简化版本:
from tkinter import *
import time
root = Tk()
root.configure(background="black")
canvas=Canvas(root, bg = "black", height = 708, width = 1280)
def callback(event):
if event.y < 350:
canvas.create_rectangle(500,234,780,334,fill="#004800",width=0)
time.sleep(2)
canvas.create_rectangle(500,374,780,474,fill="#004800",width=0)
else:
canvas.create_rectangle(500,374,780,474,fill="#004800",width=0)
time.sleep(2)
canvas.create_rectangle(500,234,780,334,fill="#004800",width=0)
canvas.bind("<Button-1>", callback)
canvas.pack(fill=BOTH, expand=1, pady=0, padx=0)
root.mainloop()
答案 0 :(得分:0)
这两个动作似乎同时发生,因为画布内容仅在time.sleep
完成后才更新。要单独查看第一步,您需要在root.update_idletasks()
暂停之前强制更新画布。
顺便说一句,您不必导入模块time
即可暂停,而可以使用root.after(2000)
(时间以毫秒为单位)。
from tkinter import *
root = Tk()
root.configure(background="black")
canvas = Canvas(root, bg = "black", height = 708, width = 1280)
def callback(event):
if event.y < 350:
canvas.create_rectangle(500,234,780,334,fill="red",width=0)
root.update_idletasks()
root.after(2000)
canvas.create_rectangle(500,374,780,474,fill="#004800",width=0)
else:
canvas.create_rectangle(500,374,780,474,fill="red",width=0)
root.update_idletasks()
root.after(2000)
canvas.create_rectangle(500,234,780,334,fill="#004800",width=0)
canvas.bind("<Button-1>", callback)
canvas.pack(fill=BOTH, expand=1, pady=0, padx=0)
root.mainloop()