通过双击事件,弹出一个新窗口,关闭原窗口后报错
我想通过双击事件,打开一个窗口,显示双击的数据详细信息。同时关闭原来的窗口,
以下命令不关闭原来窗口,是不会报错,
添加了all_tk.destroy(),关闭原来窗口就报错。
请教下高手,是什么原因?
有没有解决方法,
命令如下:
def doubleClick(event):
global mody_data
e = event.widget# 取得事件控件
iid = e.identify("item", event.x, event.y)# 取得双击项目id
mody_data = e.item(iid, "values")# 取得双击项目数据
# print(mody_data)
revise(mody_data) # 新窗口
all_tk.destroy() # 关闭现有窗口
报错信息如下:
invalid command name ".!treeview"
while executing
"$w identify row $x $y"
(procedure "ttk::treeview::DoubleClick" line 2)
invoked from within
"ttk::treeview::DoubleClick .!treeview 450 381 "
(command bound to event)
根据您提供的错误信息,看起来是与 Tkinter 的事件处理机制相关的问题。在事件处理函数中使用 all_tk.destroy() 可能会导致该窗口被关闭,而 Tkinter 同时也会尝试调用事件处理函数。这可能会导致在事件处理函数中对已销毁窗口的引用,从而导致 invalid command name 错误。
解决这个问题的方法是在事件处理函数中避免使用 destroy() 方法关闭主窗口。相反,您可以使用 withdraw() 方法隐藏窗口,然后在打开新窗口之后再关闭主窗口。以下是一个可能的解决方案:
def doubleClick(event):
global mody_data
e = event.widget# 取得事件控件
iid = e.identify("item", event.x, event.y)# 取得双击项目id
mody_data = e.item(iid, "values")# 取得双击项目数据
# print(mody_data)
all_tk.withdraw()# 隐藏现有窗口
revise(mody_data)# 新窗口
all_tk.destroy() # 关闭现有窗口
这个解决方案使用了 withdraw() 方法来隐藏主窗口,然后在打开新窗口之后再调用 destroy() 方法关闭主窗口。这应该可以避免出现上述错误。 isdkz 发表于 2023-3-15 16:53
根据您提供的错误信息,看起来是与 Tkinter 的事件处理机制相关的问题。在事件处理函数中使用 all_tk.destr ...
刚刚测试了下,还是会报错
pysunred 发表于 2023-3-15 17:36
刚刚测试了下,还是会报错
try except Threebody1 发表于 2023-3-15 18:41
try except
怎么做?
pysunred 发表于 2023-3-16 10:37
怎么做?
try:
#代码
except:
# 如果报错
页:
[1]