On 6/24/05, Michael P. Reilly <[EMAIL PROTECTED]> wrote:
> On 6/24/05, Adam Cripps <[EMAIL PROTECTED]> wrote:
> > I hadn't thought about a scrollbar - that would be very useful,
> > although doesn't add to the management side of the statement (i.e.
> > organising them according to subjects).
> >
> > The user can load a text file and adapt that - so they don't have to
> > enter them by hand if they have them in a .txt file. Typing them in by
> > hand once is better than typing them in by hand for every child that
> > you have in your class, which is the whole aim of the software.
> >
>
> I could try to whip up an example a little later if you like. I probably
> wouldn't be large, but it could demonstrate tabbed frames with scrolling.
>
> -Arcege
> --
Michael,
That would be much appreciated.
Thanks
Adam
Here you go, Adam. It's not full and complete, but it's working and you can customize it how you like.
-Michael
--
There's so many different worlds,
So many different suns.
And we have just one world,
But we live in different ones.
from Tkinter import *
class TabbedFrame(Frame):
"""Create a frame with two areas, one is a small bar at the top where tabs
will be placed, like a menu. The second area will be one container panel.
When a tab is pressed, the panel will display the contents of a selected
frame (created with the new() method). Each tab has a unique given name that
identifies it.
These are the public methods:
new(tab_name) -> frame
create a new tab and panel frame, return that frame
remove(tab_name)
destroy the tab and associated panel frame
has_tab(tab_name) -> boolean
does a tab exist with this name?
select(tab_name)
switch to selected tab
"""
def __init__(self, master):
Frame.__init__(self, master)
self.tabs = {}
self.current_tab = None
self._create_widgets()
def _create_widgets(self):
self.tabframe = Frame(self, height=25, relief=SUNKEN, bg='grey25', bd=2)
self.tabframe.pack(side=TOP, fill=X, expand=YES)
self.baseframe = Frame(self, bg='white', bd=2)
self.baseframe.pack(side=BOTTOM, fill=BOTH, expand=YES)
def _add_tab(self, name, button, frame):
self.tabs[name] = (button, frame)
def new(self, name):
if self.has_tab(name):
raise ValueError(name)
button = Button(self.tabframe, relief=FLAT, text=str(name),
bg='grey50',
command=lambda n=name, s=self: s.select(n))
button.pack(side=LEFT, pady=1, padx=1)
frame = Frame(self.baseframe)
self._add_tab(name, button, frame)
self.select(name)
return frame
def remove(self, name):
try:
button, frame = self.tabs[name]
except:
raise ValueError(name)
if self.current_tag == name:
frame.forget()
button.forget()
self.current_tag = None
frame.destroy()
button.destroy()
del self.tabs[name]
def has_tab(self, name):
return self.tabs.has_key(name)
def select(self, name):
if self.current_tab:
button, frame = self.tabs[self.current_tab]
button['bg'] = 'grey50'
frame.forget()
button, frame = self.tabs[name]
button['bg'] = 'grey75'
frame.pack(fill=BOTH, expand=YES)
self.current_tab = name
def Adam_Report(tabbedframe):
# Reproduce something like Adam's teacher report
frame = tabbedframe.new('subject')
topframe = Frame(frame)
nameframe = Frame(topframe)
firstnameframe = Frame(nameframe)
Label(firstnameframe, text="First name: ").pack(side=LEFT)
Entry(firstnameframe).pack(side=LEFT)
firstnameframe.pack(side=TOP)
lastnameframe = Frame(nameframe)
Label(lastnameframe, text="Last name: ").pack(side=LEFT)
Entry(lastnameframe).pack(side=LEFT)
lastnameframe.pack(side=TOP)
nameframe.pack(side=LEFT, fill=BOTH, expand=YES)
sexframe = Frame(topframe)
Label(sexframe, text="Sex: ").pack(side=LEFT)
sexm_r = Radiobutton(sexframe, value="male", text="male")
sexf_r = Radiobutton(sexframe, value="female", text="female")
sexm_r.pack(side=LEFT)
sexf_r.pack(side=LEFT)
sexframe.pack(side=RIGHT, fill=BOTH, expand=YES)
topframe.pack(side=TOP, fill=X, expand=YES)
splitbottom = Frame(frame)
NoStatements = 16
leftsplitframe = Frame(splitbottom) # has statementframe and Scrollbar
sb = Scrollbar(leftsplitframe, orient=VERTICAL)
canv = Canvas(leftsplitframe, yscrollcommand=sb, height=200, width=150)
sb.config(command=canv.yview)
statementframe = Frame(leftsplitframe)
canv.create_window(75, 0, window=statementframe)
for i in range(NoStatements):
label = Label(statementframe, text="Statement %s" % i)
label.grid(column=0, row=i)
entry = Entry(statementframe)
entry.grid(column=1, row=i)
button = Button(statementframe, text=">>> ")
button.grid(column=2, row=i)
sb.pack(side=RIGHT, fill=Y, expand=YES)
canv.pack(side=LEFT, fill=BOTH, expand=YES)
leftsplitframe.pack(side=LEFT, fill=BOTH, expand=YES)
textframe = Frame(splitbottom)
Label(textframe, text="Text: ").pack(side=TOP)
text_t = Text(textframe, width=60, height=30)
text_t.pack(padx=7, pady=7, fill=BOTH, expand=YES)
textframe.pack(side=RIGHT, fill=Y, expand=YES)
splitbottom.pack(fill=BOTH, expand=YES)
return frame
def test():
root = Tk()
#root.geometry('800x400')
tf = TabbedFrame(root)
tf.pack(fill=BOTH, expand=YES)
f1 = tf.new('test')
b = Button(f1, text='Continue', command=root.quit)
b.pack()
b = Button(f1, text='Quit')
b.pack()
Label(f1, text='Name').pack(side=LEFT)
Entry(f1).pack(side=LEFT)
f2 = tf.new('Try')
sb = Scrollbar(f2, orient=VERTICAL)
lb = Listbox(f2, yscrollcommand=sb.set)
for i in range(100):
lb.insert(END, str(i))
sb.config(command=lb.yview)
sb.pack(side=RIGHT, fill=Y, expand=YES)
lb.pack(fill=BOTH, expand=YES)
Adam_Report(tf)
root.mainloop()
if __name__ == '__main__':
test()
_______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
