summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-10-13 03:59:57 (GMT)
committerGuido van Rossum <guido@python.org>1998-10-13 03:59:57 (GMT)
commit439c467a0ca2c0882629a19cd89a1f3242172607 (patch)
treee924886e771ca4c6af6089beab02cd575cd1319e /Tools
parentb341888971cfe75f273138dae9907889c83433fc (diff)
downloadcpython-439c467a0ca2c0882629a19cd89a1f3242172607.zip
cpython-439c467a0ca2c0882629a19cd89a1f3242172607.tar.gz
cpython-439c467a0ca2c0882629a19cd89a1f3242172607.tar.bz2
Adding the beginnings of a Class browser. Incomplete, yet.
Diffstat (limited to 'Tools')
-rw-r--r--Tools/idle/ClassBrowser.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/Tools/idle/ClassBrowser.py b/Tools/idle/ClassBrowser.py
new file mode 100644
index 0000000..289d6f6
--- /dev/null
+++ b/Tools/idle/ClassBrowser.py
@@ -0,0 +1,70 @@
+from Tkinter import *
+import string
+import pyclbr
+
+class ClassBrowser:
+
+ def __init__(self, root, name):
+ try:
+ dict = pyclbr.readmodule(name)
+ except ImportError, msg:
+ tkMessageBox.showerror("Import error", str(msg), parent=root)
+ return
+ if not dict:
+ tkMessageBox.showerror("Nothing to browse",
+ "Module %s defines no classes" % name, parent=root)
+ return
+ self.root = root
+ self.top = top = Toplevel(root)
+ # Create help label
+ self.helplabel = Label(top,
+ text="Classes in module %s" % name,
+ borderwidth=2, relief="groove")
+ self.helplabel.pack(fill="x")
+ # Create top frame, with scrollbar and listbox
+ self.topframe = Frame(top)
+ self.topframe.pack(fill="both", expand=1)
+ self.vbar = Scrollbar(self.topframe, name="vbar")
+ self.vbar.pack(side="right", fill="y")
+ self.listbox = Listbox(self.topframe, exportselection=0,
+ takefocus=1, width=60)
+ self.listbox.pack(expand=1, fill="both")
+ # Tie listbox and scrollbar together
+ self.vbar["command"] = self.listbox.yview
+ self.listbox["yscrollcommand"] = self.vbar.set
+ # Bind events to the list box
+ self.listbox.bind("<ButtonRelease-1>", self.click_event)
+ self.listbox.bind("<Double-ButtonRelease-1>", self.double_click_event)
+ ##self.listbox.bind("<ButtonPress-3>", self.popup_event)
+ self.listbox.bind("<Key-Up>", self.up_event)
+ self.listbox.bind("<Key-Down>", self.down_event)
+ # Load the classes
+ self.loadclasses(dict)
+
+ def loadclasses(self, dict):
+ items = dict.items()
+ items.sort()
+ l = self.listbox
+ for key, value in items:
+ s = key
+ if value.super:
+ super = []
+ for sup in value.super:
+ name = sup.name
+ if sup.module != value.module:
+ name = "%s.%s" % (sup.module, name)
+ super.append(name)
+ s = s + "(%s)" % string.join(super, ", ")
+ l.insert(END, s)
+
+ def click_event(self, event):
+ pass
+
+ def double_click_event(self, event):
+ pass
+
+ def up_event(self, event):
+ pass
+
+ def down_event(self, event):
+ pass