cpython/Tools/idle/ClassBrowser.py

71 lines
2.4 KiB
Python
Raw Normal View History

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