Python tkinter button控件在第二次修改控件属性时报错,如何解决?

创建了一个Button,设定在点击时先修改控件属性state让其变灰,执行某项任务,执行完毕之后再修改一次state属性按钮恢复常态,但是实际执行完毕后按钮保持disabled状态。关闭根窗口之后就把关于按钮的错误报出来了。

def exchange():
t_exchange.config(state='disabled')
w_exchange=Toplevel(window,width=590,height=400)
w_exchange.mainloop()
t_exchange.config(state='normal')
t_exchange=Button(window,width=2,height=2,text='blabla',command=exchange)

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\abb\AppData\Local\Programs\Python\Python38-32\lib\tkinter_init.py", line 1883, in call
return self.func(*args)
File "yuanshen_simulator.py", line 18, in exchange
t_exchange.config(state='normal')
File "C:\Users\abb\AppData\Local\Programs\Python\Python38-32\lib\tkinter_init
.py", line 1637, in configure
return self.configure('configure', cnf, kw)
File "C:\Users\abb\AppData\Local\Programs\Python\Python38-32\lib\tkinter_init
.py", line 1627, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: invalid command name ".!frame.!button4"

改变state的值,发现即使是在第五行state参数输入一个乱写的参数,报错信息保持不变;把第五行和第二行交换,结果是disabled那行报错;config,configure,以及用t_exchange['state']='normal'三种方式都尝试过了,报错信息不变;已知这个按钮不属于那个toplevel,不存在窗口有关问题;把它放在两个函数中,分开执行依然报错内容相同;但是在函数以外执行这些代码不会出错,即使参数乱写也不会(但这样就不符合我所要求的了);把按钮定义处改成command=lambda:exchange(),依然报错,内容相同。

所以我推断,button对象在调整过一次state属性后无法再次调整,但这并不应该发生。求怎么化解这个问题。

你那个w_exchange.mainloop()应该去掉,你的判断并不正确