python - Tkinter 不会在中间更新 gui,除非它完成处理休息
问题描述
我是编程和 python 的新手,请找到示例代码,这是一个井字游戏,我希望 gui 在开始处理下一帧之前更新我的“标记 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', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9']
color = ['green yellow', 'yellow', 'green yellow', 'yellow',
'green yellow', 'yellow', 'green yellow', 'yellow', 'green yellow']
row_col = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (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, column=0, columnspan=1, rowspan=1, 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', border=4, text='X', font='30').grid(row=0, column=0, columnspan=1, rowspan=1, sticky='nsew')
mw.mainloop()
请运行上面的代码,看看你能不能解决我的问题
解决方案
使用after
tkinter 提供的方法在一定时间后处理某个函数/回调事件。在使用 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))
推荐阅读
- java - 如何使用给定的字符串将字符串数字转换为数字,Java
- python - 如何逐行将数据框导出到 csv?
- android - Flutter,如何在同一设备上发布和调试应用程序?
- c# - asp.net 表单网站的发布配置
- python-3.x - 提高 anagram string 函数的时间效率
- javascript - 如何在 Jest 测试中从主源代码文件夹导入模块
- javascript - 您好,我在更新状态时有点卡在反应表单中
- nginx - 静态资源在 Nginx 中通过 k8s Ingress 响应 503
- c# - 从 oidc 客户端获取用户角色
- javascript - 由于位置:固定内容,父 DIv 无法滚动