71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
|
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
|