PATH:
lib64
/
python2.7
/
idlelib
import os import sys import linecache import re import Tkinter as tk from idlelib.TreeWidget import TreeNode, TreeItem, ScrolledCanvas from idlelib.ObjectBrowser import ObjectTreeItem, make_objecttreeitem from idlelib.PyShell import PyShellFileList def StackBrowser(root, flist=None, tb=None, top=None): if top is None: top = tk.Toplevel(root) sc = ScrolledCanvas(top, bg="white", highlightthickness=0) sc.frame.pack(expand=1, fill="both") item = StackTreeItem(flist, tb) node = TreeNode(sc.canvas, None, item) node.expand() class StackTreeItem(TreeItem): def __init__(self, flist=None, tb=None): self.flist = flist self.stack = self.get_stack(tb) self.text = self.get_exception() def get_stack(self, tb): if tb is None: tb = sys.last_traceback stack = [] if tb and tb.tb_frame is None: tb = tb.tb_next while tb is not None: stack.append((tb.tb_frame, tb.tb_lineno)) tb = tb.tb_next return stack def get_exception(self): type = sys.last_type value = sys.last_value if hasattr(type, "__name__"): type = type.__name__ s = str(type) if value is not None: s = s + ": " + str(value) return s def GetText(self): return self.text def GetSubList(self): sublist = [] for info in self.stack: item = FrameTreeItem(info, self.flist) sublist.append(item) return sublist class FrameTreeItem(TreeItem): def __init__(self, info, flist): self.info = info self.flist = flist def GetText(self): frame, lineno = self.info try: modname = frame.f_globals["__name__"] except: modname = "?" code = frame.f_code filename = code.co_filename funcname = code.co_name sourceline = linecache.getline(filename, lineno) sourceline = sourceline.strip() if funcname in ("?", "", None): item = "%s, line %d: %s" % (modname, lineno, sourceline) else: item = "%s.%s(...), line %d: %s" % (modname, funcname, lineno, sourceline) return item def GetSubList(self): frame, lineno = self.info sublist = [] if frame.f_globals is not frame.f_locals: item = VariablesTreeItem("<locals>", frame.f_locals, self.flist) sublist.append(item) item = VariablesTreeItem("<globals>", frame.f_globals, self.flist) sublist.append(item) return sublist def OnDoubleClick(self): if self.flist: frame, lineno = self.info filename = frame.f_code.co_filename if os.path.isfile(filename): self.flist.gotofileline(filename, lineno) class VariablesTreeItem(ObjectTreeItem): def GetText(self): return self.labeltext def GetLabelText(self): return None def IsExpandable(self): return len(self.object) > 0 def GetSubList(self): sublist = [] for key in self.object.keys(): try: value = self.object[key] except KeyError: continue def setfunction(value, key=key, object=self.object): object[key] = value item = make_objecttreeitem(key + " =", value, setfunction) sublist.append(item) return sublist def keys(self): # unused, left for possible 3rd party use return self.object.keys() def _stack_viewer(parent): # htest # root = tk.Tk() root.title("Test StackViewer") width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) root.geometry("+%d+%d"%(x, y + 150)) flist = PyShellFileList(root) try: # to obtain a traceback object intentional_name_error except NameError: exc_type, exc_value, exc_tb = sys.exc_info() # inject stack trace to sys sys.last_type = exc_type sys.last_value = exc_value sys.last_traceback = exc_tb StackBrowser(root, flist=flist, top=root, tb=exc_tb) # restore sys to original state del sys.last_type del sys.last_value del sys.last_traceback if __name__ == '__main__': from idlelib.idle_test.htest import run run(_stack_viewer)
[+]
..
[-] IdleHistory.pyo
[edit]
[-] help.pyc
[edit]
[-] help.pyo
[edit]
[-] WidgetRedirector.pyc
[edit]
[-] SearchDialogBase.pyc
[edit]
[-] MultiCall.pyo
[edit]
[-] FileList.py
[edit]
[-] EditorWindow.py
[edit]
[-] SearchDialogBase.pyo
[edit]
[-] GrepDialog.py
[edit]
[-] ClassBrowser.py
[edit]
[-] ReplaceDialog.pyo
[edit]
[-] SearchDialogBase.py
[edit]
[-] idle.pyo
[edit]
[-] StackViewer.pyc
[edit]
[-] configHelpSourceEdit.pyc
[edit]
[-] __init__.pyo
[edit]
[-] idlever.pyo
[edit]
[-] WindowList.py
[edit]
[-] Delegator.py
[edit]
[-] EditorWindow.pyo
[edit]
[-] AutoCompleteWindow.pyo
[edit]
[-] AutoCompleteWindow.py
[edit]
[-] PathBrowser.py
[edit]
[-] configDialog.py
[edit]
[-] RemoteDebugger.pyo
[edit]
[-] FileList.pyc
[edit]
[-] rpc.pyc
[edit]
[-] MultiStatusBar.py
[edit]
[-] keybindingDialog.py
[edit]
[-] AutoComplete.pyc
[edit]
[-] configDialog.pyo
[edit]
[-] textView.pyc
[edit]
[-] run.pyc
[edit]
[-] IdleHistory.py
[edit]
[+]
idle_test
[-] extend.txt
[edit]
[-] configSectionNameDialog.pyo
[edit]
[-] StackViewer.py
[edit]
[-] configHandler.pyc
[edit]
[-] dynOptionMenuWidget.py
[edit]
[-] ReplaceDialog.pyc
[edit]
[-] RemoteDebugger.py
[edit]
[-] TreeWidget.py
[edit]
[-] AutoExpand.pyo
[edit]
[-] RstripExtension.pyc
[edit]
[-] help.html
[edit]
[-] IOBinding.pyc
[edit]
[-] AutoCompleteWindow.pyc
[edit]
[-] MultiCall.pyc
[edit]
[-] Bindings.pyc
[edit]
[-] Bindings.pyo
[edit]
[-] CallTips.py
[edit]
[-] RstripExtension.pyo
[edit]
[-] textView.py
[edit]
[-] ClassBrowser.pyo
[edit]
[-] Percolator.pyc
[edit]
[-] CallTipWindow.pyo
[edit]
[-] configDialog.pyc
[edit]
[-] ClassBrowser.pyc
[edit]
[-] ScrolledList.py
[edit]
[-] textView.pyo
[edit]
[-] __init__.pyc
[edit]
[-] ColorDelegator.py
[edit]
[-] keybindingDialog.pyc
[edit]
[-] ParenMatch.pyo
[edit]
[-] ScriptBinding.py
[edit]
[-] WidgetRedirector.pyo
[edit]
[-] rpc.py
[edit]
[-] help.txt
[edit]
[-] ParenMatch.py
[edit]
[-] IOBinding.py
[edit]
[-] FormatParagraph.pyc
[edit]
[-] SearchDialog.pyc
[edit]
[-] ToolTip.pyc
[edit]
[-] macosxSupport.pyc
[edit]
[-] SearchEngine.pyo
[edit]
[-] Percolator.py
[edit]
[-] HyperParser.pyo
[edit]
[-] ZoomHeight.pyo
[edit]
[-] config-keys.def
[edit]
[-] ObjectBrowser.pyo
[edit]
[-] keybindingDialog.pyo
[edit]
[+]
Icons
[-] PyShell.pyo
[edit]
[-] MultiCall.py
[edit]
[-] __init__.py
[edit]
[-] ToolTip.py
[edit]
[-] HISTORY.txt
[edit]
[-] NEWS.txt
[edit]
[-] idle.pyw
[edit]
[-] AutoComplete.pyo
[edit]
[-] idle.pyc
[edit]
[-] SearchEngine.pyc
[edit]
[-] OutputWindow.py
[edit]
[-] ZoomHeight.pyc
[edit]
[-] RemoteObjectBrowser.py
[edit]
[-] configHandler.pyo
[edit]
[-] rpc.pyo
[edit]
[-] dynOptionMenuWidget.pyc
[edit]
[-] UndoDelegator.py
[edit]
[-] ObjectBrowser.py
[edit]
[-] TODO.txt
[edit]
[-] CallTipWindow.py
[edit]
[-] MultiStatusBar.pyo
[edit]
[-] AutoComplete.py
[edit]
[-] RstripExtension.py
[edit]
[-] PyParse.py
[edit]
[-] tabbedpages.pyc
[edit]
[-] TreeWidget.pyo
[edit]
[-] macosxSupport.pyo
[edit]
[-] RemoteDebugger.pyc
[edit]
[-] Delegator.pyo
[edit]
[-] idlever.py
[edit]
[-] UndoDelegator.pyc
[edit]
[-] StackViewer.pyo
[edit]
[-] SearchEngine.py
[edit]
[-] Delegator.pyc
[edit]
[-] PyParse.pyc
[edit]
[-] Debugger.py
[edit]
[-] OutputWindow.pyo
[edit]
[-] SearchDialog.py
[edit]
[-] idlever.pyc
[edit]
[-] UndoDelegator.pyo
[edit]
[-] CallTips.pyc
[edit]
[-] CodeContext.pyc
[edit]
[-] macosxSupport.py
[edit]
[-] ToolTip.pyo
[edit]
[-] README.txt
[edit]
[-] EditorWindow.pyc
[edit]
[-] Debugger.pyo
[edit]
[-] HyperParser.pyc
[edit]
[-] WidgetRedirector.py
[edit]
[-] config-highlight.def
[edit]
[-] dynOptionMenuWidget.pyo
[edit]
[-] Percolator.pyo
[edit]
[-] configHelpSourceEdit.pyo
[edit]
[-] ObjectBrowser.pyc
[edit]
[-] aboutDialog.py
[edit]
[-] ReplaceDialog.py
[edit]
[-] CallTips.pyo
[edit]
[-] config-extensions.def
[edit]
[-] WindowList.pyo
[edit]
[-] SearchDialog.pyo
[edit]
[-] IdleHistory.pyc
[edit]
[-] CREDITS.txt
[edit]
[-] CodeContext.pyo
[edit]
[-] RemoteObjectBrowser.pyo
[edit]
[-] ScrolledList.pyc
[edit]
[-] AutoExpand.pyc
[edit]
[-] GrepDialog.pyo
[edit]
[-] configHandler.py
[edit]
[-] FormatParagraph.pyo
[edit]
[-] OutputWindow.pyc
[edit]
[-] WindowList.pyc
[edit]
[-] idle.py
[edit]
[-] HyperParser.py
[edit]
[-] GrepDialog.pyc
[edit]
[-] TreeWidget.pyc
[edit]
[-] tabbedpages.pyo
[edit]
[-] configSectionNameDialog.pyc
[edit]
[-] ZoomHeight.py
[edit]
[-] PathBrowser.pyo
[edit]
[-] aboutDialog.pyo
[edit]
[-] run.py
[edit]
[-] ScrolledList.pyo
[edit]
[-] Bindings.py
[edit]
[-] FileList.pyo
[edit]
[-] config-main.def
[edit]
[-] help.py
[edit]
[-] ScriptBinding.pyc
[edit]
[-] run.pyo
[edit]
[-] ColorDelegator.pyc
[edit]
[-] aboutDialog.pyc
[edit]
[-] FormatParagraph.py
[edit]
[-] CallTipWindow.pyc
[edit]
[-] ParenMatch.pyc
[edit]
[-] PyShell.py
[edit]
[-] configSectionNameDialog.py
[edit]
[-] PyParse.pyo
[edit]
[-] tabbedpages.py
[edit]
[-] PyShell.pyc
[edit]
[-] MultiStatusBar.pyc
[edit]
[-] configHelpSourceEdit.py
[edit]
[-] ChangeLog
[edit]
[-] PathBrowser.pyc
[edit]
[-] ColorDelegator.pyo
[edit]
[-] CodeContext.py
[edit]
[-] AutoExpand.py
[edit]
[-] RemoteObjectBrowser.pyc
[edit]
[-] Debugger.pyc
[edit]
[-] ScriptBinding.pyo
[edit]
[-] IOBinding.pyo
[edit]