from TreeWidget
import TreeNode
, TreeItem
, ScrolledCanvas
from ObjectBrowser
import ObjectTreeItem
, make_objecttreeitem
def StackBrowser(root
, flist
=None, tb
=None, top
=None):
from Tkinter
import Toplevel
sc
= ScrolledCanvas(top
, bg
="white", highlightthickness
=0)
sc
.frame
.pack(expand
=1, fill
="both")
item
= StackTreeItem(flist
, tb
)
node
= TreeNode(sc
.canvas
, None, item
)
class StackTreeItem(TreeItem
):
def __init__(self
, flist
=None, tb
=None):
self
.stack
= self
.get_stack(tb
)
self
.text
= self
.get_exception()
if tb
and tb
.tb_frame
is None:
stack
.append((tb
.tb_frame
, tb
.tb_lineno
))
if hasattr(type, "__name__"):
s
= s
+ ": " + str(value
)
item
= FrameTreeItem(info
, self
.flist
)
class FrameTreeItem(TreeItem
):
def __init__(self
, info
, flist
):
frame
, lineno
= self
.info
modname
= frame
.f_globals
["__name__"]
filename
= code
.co_filename
sourceline
= linecache
.getline(filename
, lineno
)
sourceline
= sourceline
.strip()
if funcname
in ("?", "", None):
item
= "%s, line %d: %s" % (modname
, lineno
, sourceline
)
item
= "%s.%s(...), line %d: %s" % (modname
, funcname
,
frame
, lineno
= self
.info
if frame
.f_globals
is not frame
.f_locals
:
item
= VariablesTreeItem("<locals>", frame
.f_locals
, self
.flist
)
item
= VariablesTreeItem("<globals>", frame
.f_globals
, 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
):
return len(self
.object) > 0
return self
.object.keys()
def setfunction(value
, key
=key
, object=self
.object):
item
= make_objecttreeitem(key
+ " =", value
, setfunction
)
sys
.last_type
, sys
.last_value
, sys
.last_traceback
= sys
.exc_info()
StackBrowser(None, top
=root
)
if __name__
== "__main__":