# File: vpane.py
# http://www.tcl.tk/man/tcl8.5/TkCmd/ttk_panedwindow.htm#M-orient
# http://docs.python.org/py3k/library/tkinter.scrolledtext.html
from tkinter import *
from tkinter import ttk
from tkinter.scrolledtext import *
from demopanels import MsgPanel, SeeDismissPanel
class VerticalPaneDemo(ttk.Frame):
def __init__(self, isapp=True, name='verticalpanedemo'):
ttk.Frame.__init__(self, name=name)
self.pack(expand=Y, fill=BOTH)
self.master.title('Vertical Paned Window Demo')
self.isapp = isapp
self._create_widgets()
def _create_widgets(self):
if self.isapp:
MsgPanel(self,
["Drag the 'sash' between the two scrolled windows ",
"to resize them."])
SeeDismissPanel(self)
self._create_demo_panel()
def _create_demo_panel(self):
demoPanel = ttk.Frame(self, name='demo')
demoPanel.pack(side=TOP, fill=BOTH, expand=Y)
pw = ttk.PanedWindow(demoPanel, orient=VERTICAL)
pw.pack(side=TOP, expand=Y, fill=BOTH,
pady=2, padx='2m')
# create widgets for top and bottom panes
top = self._create_listbox(pw)
bottom = self._create_text_wnd(pw)
# add widgets to the pane window
pw.add(top)
pw.add(bottom)
def _create_listbox(self, parent):
f = ttk.Frame(parent) # frame to hold listbox and scrollbar
# listbox values
wnames = ('List of Tk Widgets',
'button','canvas', 'checkbutton', 'entry',
'frame', 'label', 'labelframe', 'listbox',
'menu', 'menubutton', 'message', 'panedwindow',
'radiobutton', 'scale', 'scrollbar', 'spinbox',
'text', 'toplevel')
paneList = StringVar() # use a Tkinter variable for list values
paneList.set(wnames) # add list of widget names to the variable
lb = Listbox(f, listvariable=paneList)
# highlight the first item in the list
lb.itemconfigure(0, background=lb.cget('fg'), fg=lb.cget('bg'))
# add a vertical scrollbar
vscroll = ttk.Scrollbar(f, orient=VERTICAL, command=lb.yview)
lb['yscrollcommand'] = vscroll.set
vscroll.pack(side=RIGHT, fill=Y)
lb.pack(fill=BOTH, expand=Y)
return f
def _create_text_wnd(self, parent):
# ScrolledText only has the vertical scrollbar
txt = ScrolledText(height=8, width=30, wrap=None)
txt.insert(END, 'This is just a normal text widget.')
txt.pack(expand=Y, fill=BOTH)
return txt
if __name__ == '__main__':
VerticalPaneDemo().mainloop()
Saturday, August 18, 2012
Tkinter Vertical Paned Window Demo
This code is based on the Tcl paned2.tcl demo.
Labels:
Tkinter Demos,
Tkinter Windows