PATH:
opt
/
bitninja-python-dojo
/
embedded
/
lib
/
python3.9
/
idlelib
from tkinter import Toplevel, TclError import sys class WindowList: def __init__(self): self.dict = {} self.callbacks = [] def add(self, window): window.after_idle(self.call_callbacks) self.dict[str(window)] = window def delete(self, window): try: del self.dict[str(window)] except KeyError: # Sometimes, destroy() is called twice pass self.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: continue list.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: pass def 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_menu register_callback = registry.register_callback unregister_callback = registry.unregister_callback class ListedToplevel(Toplevel): def __init__(self, master, **kw): Toplevel.__init__(self, master, kw) registry.add(self) self.focused_widget = self def 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 override return 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. pass if __name__ == "__main__": from unittest import main main('idlelib.idle_test.test_window', verbosity=2)
[-] multicall.py
[edit]
[-] redirector.py
[edit]
[-] searchbase.py
[edit]
[-] debugger_r.py
[edit]
[-] debugger.py
[edit]
[-] window.py
[edit]
[-] config_key.py
[edit]
[-] delegator.py
[edit]
[-] help_about.py
[edit]
[-] query.py
[edit]
[-] autoexpand.py
[edit]
[-] mainmenu.py
[edit]
[+]
..
[-] config.py
[edit]
[-] config-keys.def
[edit]
[-] tooltip.py
[edit]
[-] textview.py
[edit]
[+]
Icons
[-] pyshell.py
[edit]
[-] rpc.py
[edit]
[-] NEWS2x.txt
[edit]
[-] README.txt
[edit]
[-] idle.py
[edit]
[-] zzdummy.py
[edit]
[+]
idle_test
[-] undo.py
[edit]
[-] run.py
[edit]
[-] __main__.py
[edit]
[-] debugobj_r.py
[edit]
[-] scrolledlist.py
[edit]
[-] browser.py
[edit]
[-] runscript.py
[edit]
[-] CREDITS.txt
[edit]
[-] percolator.py
[edit]
[-] colorizer.py
[edit]
[-] TODO.txt
[edit]
[-] idle.pyw
[edit]
[-] grep.py
[edit]
[-] squeezer.py
[edit]
[+]
__pycache__
[-] sidebar.py
[edit]
[-] config-main.def
[edit]
[-] editor.py
[edit]
[-] idle.bat
[edit]
[-] NEWS.txt
[edit]
[-] stackviewer.py
[edit]
[-] ChangeLog
[edit]
[-] parenmatch.py
[edit]
[-] extend.txt
[edit]
[-] help.html
[edit]
[-] debugobj.py
[edit]
[-] calltip_w.py
[edit]
[-] replace.py
[edit]
[-] iomenu.py
[edit]
[-] dynoption.py
[edit]
[-] search.py
[edit]
[-] statusbar.py
[edit]
[-] config-extensions.def
[edit]
[-] searchengine.py
[edit]
[-] hyperparser.py
[edit]
[-] config-highlight.def
[edit]
[-] __init__.py
[edit]
[-] zoomheight.py
[edit]
[-] filelist.py
[edit]
[-] pathbrowser.py
[edit]
[-] calltip.py
[edit]
[-] HISTORY.txt
[edit]
[-] configdialog.py
[edit]
[-] macosx.py
[edit]
[-] outwin.py
[edit]
[-] help.py
[edit]
[-] history.py
[edit]
[-] pyparse.py
[edit]
[-] tree.py
[edit]
[-] format.py
[edit]
[-] autocomplete.py
[edit]
[-] autocomplete_w.py
[edit]
[-] codecontext.py
[edit]