Tkinter不会中间更新gui,除非它完成处理休息

我对编程和python还是陌生的 请找到示例代码,这是一个井字游戏,我希望gui在开始处理下一帧之前先更新“ marking x”帧。

我不知道如何使它工作,

try:
    import tkinter as tk
except:
    import Tkinter as tk
import time as t
import random as r

data_list = ['a1','a2','a3','a4','a5','a6','a7','a8','a9']
used_list = ['a1','a9']
color = ['green yellow','yellow','green yellow','green yellow']
row_col = [(0,0),(0,1),2),(1,(2,2)]
unused = list

mw = tk.Tk()
mw.geometry("300x300+50+50")

for i in range(3):
    mw.columnconfigure(i,weight=10)
    mw.rowconfigure(i,weight=10)

for j in range(9):
    data_list[j] = tk.Frame(mw)
    data_list[j].grid(row=row_col[j][0],column=row_col[j][1])
    data_list[j].config(background=color[j],width=100,height=100)
    data_list[j].rowconfigure(0,minsize=100)
    data_list[j].columnconfigure(0,minsize=100)
    tk.Button(data_list[j],background=color[j],border=1,command=lambda x=j: cross_mark(data_list[x])).grid(row=0,column=0,columnspan=1,rowspan=1,sticky='nsew')


def cross_mark(blk):
    tk.Button(blk,background='orange red',border=4,text='X',font='30').grid(row=0,sticky='nsew')
    comp_mark(blk)


def comp_mark(used):
    blk = r.choice(data_list)
    if blk == used:
        while blk == used:
            blk = r.choice(data_list)
    t.sleep(5)
    tk.Button(blk,background='RoyalBlue1',sticky='nsew')
mw.mainloop()

plz运行以上代码,看看是否可以解决我的问题

an_day 回答:Tkinter不会中间更新gui,除非它完成处理休息

使用tkinter提供的after方法在一定时间后处理特定的函数/回调事件。使用tkinter时,永远不可能使用time.sleep,因为tkinter本身处于恒定的等待状态(即,它正在等待按钮单击或其他事件)

在您的cross_mark函数中添加以下内容:

def cross_mark(blk):
    tk.Button(blk,background='orange red',border=4,text='X',font='30').grid(row=0,column=0,columnspan=1,rowspan=1,sticky='nsew')
    mw.update_idletasks()
    mw.after(1000,comp_mark(blk))
本文链接:https://www.f2er.com/3152210.html

大家都在问