为什么在tkinter中点击按钮调用Toplevel窗口时需要等数据处理完后才弹出窗口
为什么在tkinter中点击按钮调用Toplevel窗口时需要等数据处理完后才弹出窗口,而不是点击按钮后一直显示Toplevel窗口观看其标签的变动?
import time
from collections import OrderedDict
import tkinter as tk
def t_tuple(win):
top = TopLevel(win, 300, 200)
group = []
top.label1['text'] = '1、正在创建组合。。。。。。'
star = time.time()
for i in range(36-5):
for j in range(i+1, 36-4):
for k in range(j+1, 36-3):
for l in range(k+1, 36-2):
for n in range(l+1, 36-1):
for m in range(n+1, 36):
result_int = [i, j, k, l, n, m]
result_int.sort()
str1 = '-'.join(map(str, result_int))
group.append(str1)
end = time.time()
top.label1['text'] = '1、组合创建完成,用时:%.2f' % (end-star)
top.label2['text'] = '2、开始过滤数据。。。。。。'
star2 = time.time()
my_list = list(OrderedDict.fromkeys(group))
end2 = time.time()
top.label2['text'] = '2、数据过滤完成,用时:%.2f' % (end2-star2)
def center(root , width, height):
screen_width, screen_height = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry(f'{width}x{height}+{(screen_width-width)//2}+{(screen_height-height)//2}')
class TopLevel(tk.Toplevel):
def __init__(self, root, width, height):
super().__init__(root)
center(self, width, height)
self.wm_overrideredirect(False)
frame = tk.Frame(self, bg='green')
frame.pack(side=tk.LEFT, fill='both', expand=1)
self.label1 = tk.Label(frame, font=('微软雅黑', 10), justify=tk.LEFT, bg='green')
self.label1.grid(row=0, column=0, padx=10, pady=1, sticky='w')
self.label2 = tk.Label(frame, font=('微软雅黑', 10), justify=tk.LEFT, bg='green')
self.label2.grid(row=1, column=0, padx=10, pady=1, sticky='w')
self.buttom1 = tk.Button(frame, text='关闭', font=('微软雅黑', 10), command=self.destroy, anchor='center',
width=10)
self.buttom1.place(relx=0.35, rely=0.75)
self.transient() # 定义为临时窗口
self.grab_set()
self.wm_attributes("-topmost", 1) # 将窗口置顶
if __name__ == '__main__':
root = tk.Tk()
root.title('测试')
center(root, 500, 200)
font = ('宋体', 15)
tk.Button(root, text='启动', font=font, command=lambda: t_tuple(root)).pack()
root.mainloop()
关于 LearnKu
The GUI won't update immediately after you update the tkinter architecture, or it will update when idle after other tasks done.
Try to add following statement when you need to to update immediately.