Віктор Asked:2024-03-25 22:38:27 +0800 CST2024-03-25 22:38:27 +0800 CST 2024-03-25 22:38:27 +0800 CST 在 Tkinter 中跟踪子窗口关闭 772 有一个Users()调用子窗口的函数。 如何等待子窗口关闭然后执行TableSetupUsersInsert()? 现在这个函数的执行无需等待子窗口关闭: def users_setup_users(): Users() TableSetupUsersInsert() python 1 个回答 Voted Best Answer S. Nick 2024-03-25T23:43:41+08:002024-03-25T23:43:41+08:00 尝试这个: import tkinter as tk class App: def __init__(self): self.root = tk.Tk() self.count = 0 b=tk.Button(text="create window", command=self.create_window) b.pack() self.root.mainloop() def create_window(self): self.count += 1 t=FadeToplevel(self.root) t.wm_title("Window %s" % self.count) t.fade_in() class FadeToplevel(tk.Toplevel): '''A toplevel widget with the ability to fade in''' def __init__(self, *args, **kwargs): tk.Toplevel.__init__(self, *args, **kwargs) self.attributes("-alpha", 0.0) # !!! +++ self.protocol('WM_DELETE_WINDOW', self.TableSetupUsersInsert) # Отследить закрытие def fade_in(self): alpha = self.attributes("-alpha") alpha = min(alpha + .01, 1.0) self.attributes("-alpha", alpha) if alpha < 1.0: self.after(10, self.fade_in) # !!! +++ def TableSetupUsersInsert(self): # Отследили self.destroy() print('Дочернее окно закрыто. Делайте что-нибудь.') if __name__ == "__main__": app=App() 更新 一切都是如此,据我在您的代码中的理解,跟踪发生在子窗口中,但我需要它在主窗口中 始终提供一个可重现性最低的示例来演示问题。 你需要善于沟通你想做什么和不能做什么。 更新版本如下 import tkinter as tk class App: def __init__(self): self.root = tk.Tk() self.count = 0 b=tk.Button(text="create window", command=self.create_window) b.pack() self.root.mainloop() def create_window(self): self.count += 1 t = FadeToplevel(self) # +++ t.wm_title("Window %s" % self.count) t.fade_in() # !!! +++ def TableSetupUsersInsert(self, text): # Отследили print(text) class FadeToplevel(tk.Toplevel): '''A toplevel widget with the ability to fade in''' def __init__(self, parant, *args, **kwargs): # +++ tk.Toplevel.__init__(self, *args, **kwargs) self.parent = parant # +++ self.attributes("-alpha", 0.0) # !!! +++ self.protocol('WM_DELETE_WINDOW', self.closeToplevel) # Отследить закрытие def fade_in(self): alpha = self.attributes("-alpha") alpha = min(alpha + .01, 1.0) self.attributes("-alpha", alpha) if alpha < 1.0: self.after(10, self.fade_in) # !!! +++ def closeToplevel(self): # Отследили self.destroy() text = 'Дочернее окно закрыто. Делайте что-нибудь.' self.parent.TableSetupUsersInsert(text) if __name__ == "__main__": app=App()
尝试这个:
更新
始终提供一个可重现性最低的示例来演示问题。
你需要善于沟通你想做什么和不能做什么。
更新版本如下