from tkinter import Toplevel, TclErrorimport sysclass WindowList:def __init__(self):self.dict = {}self.callbacks = []def add(self, window):window.after_idle(self.call_callbacks)self.dict[str(window)] = windowdef delete(self, window):try:del self.dict[str(window)]except KeyError:# Sometimes, destroy() is called twicepassself.call_callbacks()def add_windows_to_menu(self, menu):list = []for key in self.dict:window = self.dict[key]try:title = window.get_title()except TclError:continuelist.append((title, key, window))list.sort()for title, key, window in list:menu.add_command(label=title, command=window.wakeup)def register_callback(self, callback):self.callbacks.append(callback)def unregister_callback(self, callback):try:self.callbacks.remove(callback)except ValueError:passdef call_callbacks(self):for callback in self.callbacks:try:callback()except:t, v, tb = sys.exc_info()print("warning: callback failed in WindowList", t, ":", v)registry = WindowList()add_windows_to_menu = registry.add_windows_to_menuregister_callback = registry.register_callbackunregister_callback = registry.unregister_callbackclass ListedToplevel(Toplevel):def __init__(self, master, **kw):Toplevel.__init__(self, master, kw)registry.add(self)self.focused_widget = selfdef destroy(self):registry.delete(self)Toplevel.destroy(self)# If this is Idle's last window then quit the mainloop# (Needed for clean exit on Windows 98)if not registry.dict:self.quit()def update_windowlist_registry(self, window):registry.call_callbacks()def get_title(self):# Subclass can overridereturn self.wm_title()def wakeup(self):try:if self.wm_state() == "iconic":self.wm_withdraw()self.wm_deiconify()self.tkraise()self.focused_widget.focus_set()except TclError:# This can happen when the Window menu was torn off.# Simply ignore it.passif __name__ == "__main__":from unittest import mainmain('idlelib.idle_test.test_window', verbosity=2)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。