Updated for Python 1.4
diff --git a/Demo/tkinter/guido/AttrDialog.py b/Demo/tkinter/guido/AttrDialog.py
index 2b501c70..32b4b7e 100755
--- a/Demo/tkinter/guido/AttrDialog.py
+++ b/Demo/tkinter/guido/AttrDialog.py
@@ -24,12 +24,10 @@
 		self.master = dialog.top
 		self.default, self.klass = dialog.options[option]
 		self.var = self.varclass(self.master)
-		self.frame = Frame(self.master,
-				   {Pack: {'expand': 0, 'fill': 'x'}})
-		self.label = Label(self.frame,
-				   {'text': option + ':',
-				    Pack: {'side': 'left'},
-				    })
+		self.frame = Frame(self.master)
+		self.frame.pack(fill=X)
+		self.label = Label(self.frame, text=(option + ":"))
+		self.label.pack(side=LEFT)
 		self.update()
 		self.addoption()
 
@@ -53,55 +51,48 @@
 
 	def addoption(self):
 		self.button = Checkbutton(self.frame,
-					 {'text': 'on/off',
-					  'onvalue': '1',
-					  'offvalue': '0',
-					  'variable': self.var,
-					  'relief': 'raised',
-					  'borderwidth': 2,
-					  'command': self.set,
-					  Pack: {'side': 'right'},
-					  })
+					 text='on/off',
+					 onvalue=1,
+					 offvalue=0,
+					 variable=self.var,
+					 relief=RAISED,
+					 borderwidth=2,
+					 command=self.set)
+		self.button.pack(side=RIGHT)
 
 class EnumOption(Option):
 
 	def addoption(self):
 		self.button = Menubutton(self.frame,
-					 {'textvariable': self.var,
-					  'relief': 'raised',
-					  'borderwidth': 2,
-					  Pack: {'side': 'right'},
-					  })
+					 textvariable=self.var,
+					 relief=RAISED, borderwidth=2)
+		self.button.pack(side=RIGHT)
 		self.menu = Menu(self.button)
 		self.button['menu'] = self.menu
 		for v in self.dialog.classes[self.klass]:
 			self.menu.add_radiobutton(
-				{'label': v,
-				 'variable': self.var,
-				 'value': v,
-				 'command': self.set,
-				 })
+			    label=v,
+			    variable=self.var,
+			    value=v,
+			    command=self.set)
 
 class StringOption(Option):
 
 	def addoption(self):
 		self.entry = Entry(self.frame,
-				   {'textvariable': self.var,
-				    'width': 10,
-				    'relief': 'sunken',
-				    'borderwidth': 2,
-				    Pack: {'side': 'right',
-					   'fill': 'x', 'expand': 1},
-				    })
+				   textvariable=self.var,
+				   width=10,
+				   relief=SUNKEN,
+				   borderwidth=2)
+		self.entry.pack(side=RIGHT, fill=X, expand=1)
 		self.entry.bind('<Return>', self.set)
 
 class ReadonlyOption(Option):
 
 	def addoption(self):
-		self.label = Label(self.frame,
-				   {'textvariable': self.var,
-				    'anchor': 'e',
-				    Pack: {'side': 'right'}})
+		self.label = Label(self.frame, textvariable=self.var,
+				   anchor=E)
+		self.label.pack(side=RIGHT)
 
 class Dialog:
 
@@ -156,7 +147,7 @@
 		Dialog.__init__(self, widget)
 
 	def refresh(self):
-		self.current = self.widget.newinfo()
+		self.current = self.widget.info()
 		self.current['.class'] = self.widget.winfo_class()
 		self.current['.name'] = self.widget._w
 
@@ -164,8 +155,8 @@
 		def set(self, e=None):
 			self.current = self.var.get()
 			try:
-				Pack.config(self.dialog.widget,
-					    {self.option: self.current})
+				apply(self.dialog.widget.pack, (),
+				      {self.option: self.current})
 			except TclError, msg:
 				print msg
 				self.refresh()
@@ -192,14 +183,14 @@
 		}
 
 	classes = {
-		'Anchor': ('n','ne', 'e','se', 's','sw', 'w','nw', 'center'),
+		'Anchor': (N, NE, E, SE, S, SW, W, NW, CENTER),
 		'Boolean': 'boolean',
 		'Class': 'readonly',
 		'Expand': 'boolean',
-		'Fill': ('none', 'x', 'y', 'both'),
+		'Fill': (NONE, X, Y, BOTH),
 		'Name': 'readonly',
 		'Pad': 'pixel',
-		'Side': ('top', 'right', 'bottom', 'left'),
+		'Side': (TOP, RIGHT, BOTTOM, LEFT),
 		'Widget': 'readonly',
 		}
 
@@ -220,7 +211,7 @@
 			words = self.master.tk.splitlist(
 				self.master.send(self.app,
 						 'pack',
-						 'newinfo',
+						 'info',
 						 self.widget))
 		except TclError, msg:
 			print msg
@@ -306,7 +297,7 @@
 
 	# Universal classes
 	classes = {
-		'Anchor': ('n','ne', 'e','se', 's','sw', 'w','nw', 'center'),
+		'Anchor': (N, NE, E, SE, S, SW, W, NW, CENTER),
 		'Aspect': 'integer',
 		'Background': 'color',
 		'Bitmap': 'bitmap',
@@ -325,16 +316,16 @@
 		'Geometry': 'geometry',
 		'Height': 'pixel',
 		'InsertWidth': 'time',
-		'Justify': ('left', 'center', 'right'),
+		'Justify': (LEFT, CENTER, RIGHT),
 		'Label': 'string',
 		'Length': 'pixel',
 		'MenuName': 'widget',
 		'Name': 'readonly',
 		'OffTime': 'time',
 		'OnTime': 'time',
-		'Orient': ('horizontal', 'vertical'),
+		'Orient': (HORIZONTAL, VERTICAL),
 		'Pad': 'pixel',
-		'Relief': ('raised', 'sunken', 'flat', 'ridge', 'groove'),
+		'Relief': (RAISED, SUNKEN, FLAT, RIDGE, GROOVE),
 		'RepeatDelay': 'time',
 		'RepeatInterval': 'time',
 		'ScrollCommand': 'command',
@@ -351,12 +342,12 @@
 		'Variable': 'variable',
 		'Value': 'string',
 		'Width': 'pixel',
-		'Wrap': ('none', 'char', 'word'),
+		'Wrap': (NONE, CHAR, WORD),
 		}
 
 	# Classes that (may) differ per widget type
-	_tristate = {'State': ('normal', 'active', 'disabled')}
-	_bistate = {'State': ('normal', 'disabled')}
+	_tristate = {'State': (NORMAL, ACTIVE, DISABLED)}
+	_bistate = {'State': (NORMAL, DISABLED)}
 	addclasses = {
 		'Button': _tristate,
 		'Radiobutton': _tristate,
@@ -424,14 +415,12 @@
 	if sys.argv[1:]:
 		remotetest(root, sys.argv[1])
 	else:
-		frame = Frame(root, {'name': 'frame',
-				     Pack: {'expand': 1, 'fill': 'both'},
-				     })
-		button = Button(frame, {'name': 'button',
-					'text': 'button',
-					Pack: {'expand': 1}})
-		canvas = Canvas(frame, {'name': 'canvas',
-					Pack: {}})
+		frame = Frame(root, name='frame')
+		frame.pack(expand=1, fill=BOTH)
+		button = Button(frame, name='button', text='button')
+		button.pack(expand=1)
+		canvas = Canvas(frame, name='canvas')
+		canvas.pack()
 		fpd = PackDialog(frame)
 		fwd = WidgetDialog(frame)
 		bpd = PackDialog(button)
diff --git a/Demo/tkinter/guido/ManPage.py b/Demo/tkinter/guido/ManPage.py
index 4f0af8c..ccd21b4 100755
--- a/Demo/tkinter/guido/ManPage.py
+++ b/Demo/tkinter/guido/ManPage.py
@@ -20,14 +20,14 @@
 class EditableManPage(ScrolledText):
 
 	# Initialize instance
-	def __init__(self, master=None, cnf={}):
+	def __init__(self, master=None, **cnf):
 		# Initialize base class
-		ScrolledText.__init__(self, master, cnf)
+		apply(ScrolledText.__init__, (self, master), cnf)
 
 		# Define tags for formatting styles
-		self.tag_config('X', {'underline': 1})
-		self.tag_config('!', {'font': BOLDFONT})
-		self.tag_config('_', {'font': ITALICFONT})
+		self.tag_config('X', underline=1)
+		self.tag_config('!', font=BOLDFONT)
+		self.tag_config('_', font=ITALICFONT)
 
 		# Set state to idle
 		self.fp = None
@@ -83,8 +83,8 @@
 		self.empty = 0
 		self.buffer = None
 		savestate = self['state']
-		self['state'] = 'normal'
-		self.delete('1.0', 'end')
+		self['state'] = NORMAL
+		self.delete('1.0', END)
 		self['state'] = savestate
 
 	# End parsing -- must be busy, need not be at EOF
@@ -133,11 +133,11 @@
 			self.empty = 0
 			return
 		savestate = self['state']
-		self['state'] = 'normal'
+		self['state'] = NORMAL
 		if TkVersion >= 4.0:
 			self.mark_set('insert', 'end-1c')
 		else:
-			self.mark_set('insert', 'end')
+			self.mark_set('insert', END)
 		if self.empty:
 			# One or more previous lines were empty
 			# -- insert one blank line in the text
@@ -176,9 +176,9 @@
 class ReadonlyManPage(EditableManPage):
 
 	# Initialize instance
-	def __init__(self, master=None, cnf={}):
-		EditableManPage.__init__(self, master,
-					 (cnf, {'state': 'disabled'}))
+	def __init__(self, master=None, **cnf):
+		cnf['state'] = DISABLED
+		apply(EditableManPage.__init__, (self, master), cnf)
 
 # Alias
 ManPage = ReadonlyManPage
@@ -206,8 +206,8 @@
 		name = os.path.join(MANDIR, name)
 	root = Tk()
 	root.minsize(1, 1)
-	manpage = ManPage(root, {'relief': 'sunken', 'bd': 2,
-				 Pack: {'expand': 1, 'fill': 'both'}})
+	manpage = ManPage(root, relief=SUNKEN, borderwidth=2)
+	manpage.pack(expand=1, fill=BOTH)
 	if formatted:
 		fp = open(name, 'r')
 	else:
diff --git a/Demo/tkinter/guido/ShellWindow.py b/Demo/tkinter/guido/ShellWindow.py
index 93a13d6..0b59daa 100755
--- a/Demo/tkinter/guido/ShellWindow.py
+++ b/Demo/tkinter/guido/ShellWindow.py
@@ -6,19 +6,12 @@
 from Dialog import Dialog
 import signal
 
-TK_READABLE  = 1
-TK_WRITABLE  = 2
-TK_EXCEPTION = 4
-
 BUFSIZE = 512
 
 class ShellWindow(ScrolledText):
 
-	def __init__(self, master = None, cnf = {}):
-		try:
-			shell = cnf['shell']
-			del cnf['shell']
-		except KeyError:
+	def __init__(self, master=None, shell=None, **cnf):
+		if not shell:
 			try:
 				shell = os.environ['SHELL']
 			except KeyError:
@@ -27,7 +20,7 @@
 		args = string.split(shell)
 		shell = args[0]
 
-		ScrolledText.__init__(self, master, cnf)
+		apply(ScrolledText.__init__, (self, master), cnf)
 		self.pos = '1.0'
 		self.bind('<Return>', self.inputhandler)
 		self.bind('<Control-c>', self.sigint)
@@ -36,7 +29,7 @@
 		self.bind('<Control-d>', self.sendeof)
 
 		self.pid, self.fromchild, self.tochild = spawn(shell, args)
-		self.tk.createfilehandler(self.fromchild, TK_READABLE,
+		self.tk.createfilehandler(self.fromchild, READABLE,
 					  self.outputhandler)
 
 	def outputhandler(self, file, mask):
@@ -54,68 +47,60 @@
 				msg = "killed by signal %d" % (cause & 0x7f)
 				if cause & 0x80:
 					msg = msg + " -- core dumped"
-			Dialog(self.master, {
-				'text': msg,
-				'title': "Exit status",
-				'bitmap': 'warning',
-				'default': 0,
-				'strings': ('OK',),
-			})
+			Dialog(self.master,
+			       text=msg,
+			       title="Exit status",
+			       bitmap='warning',
+			       default=0,
+			       strings=('OK',))
 			return
-		self.insert('end', data)
-		self.pos = self.index('end')
-		self.yview_pickplace('end')
+		self.insert(END, data)
+		self.pos = self.index("end - 1 char")
+		self.yview_pickplace(END)
 
 	def inputhandler(self, *args):
 		if not self.pid:
-			Dialog(self.master, {
-				'text': "No active process",
-				'title': "No process",
-				'bitmap': 'error',
-				'default': 0,
-				'strings': ('OK',),
-			})
-			return
-		self.insert('end', '\n')
-		line = self.get(self.pos, 'end')
-		self.pos = self.index('end')
+			self.no_process()
+			return "break"
+		self.insert(END, "\n")
+		line = self.get(self.pos, "end - 1 char")
+		self.pos = self.index(END)
 		os.write(self.tochild, line)
+		return "break"
 
 	def sendeof(self, *args):
 		if not self.pid:
-			Dialog(self.master, {
-				'text': "No active process",
-				'title': "No process",
-				'bitmap': 'error',
-				'default': 0,
-				'strings': ('OK',),
-			})
-			return
+			self.no_process()
+			return "break"
 		os.close(self.tochild)
+		return "break"
 
 	def sendsig(self, sig):
 		if not self.pid:
-			Dialog(self.master, {
-				'text': "No active process",
-				'title': "No process",
-				'bitmap': 'error',
-				'default': 0,
-				'strings': ('OK',),
-			})
-			return
+			self.no_process()
+			return "break"
 		os.kill(self.pid, sig)
+		return "break"
 
 	def sigint(self, *args):
-		self.sendsig(signal.SIGINT)
+		return self.sendsig(signal.SIGINT)
 
 	def sigquit(self, *args):
-		self.sendsig(signal.SIGQUIT)
+		return self.sendsig(signal.SIGQUIT)
 
 	def sigterm(self, *args):
-		self.sendsig(signal.SIGTERM)
+		return self.sendsig(signal.SIGTERM)
 
 	def sigkill(self, *args):
-		self.sendsig(signal.SIGKILL)
+		return self.sendsig(signal.SIGKILL)
+
+	def no_process(self):
+		Dialog(self.master,
+		       text="No active process",
+		       title="No process",
+		       bitmap='error',
+		       default=0,
+		       strings=('OK',))
 
 MAXFD = 100	# Max number of file descriptors (os.getdtablesize()???)
 
@@ -142,7 +127,7 @@
 		try:
 			os.execvp(prog, args)
 		finally:
-			print 'execvp failed'
+			sys.stderr.write('execvp failed\n')
 			os._exit(1)
 	os.close(p2cread)
 	os.close(c2pwrite)
@@ -150,13 +135,13 @@
 
 def test():
 	shell = string.join(sys.argv[1:])
-	cnf = {}
-	if shell:
-		cnf['shell'] = shell
 	root = Tk()
 	root.minsize(1, 1)
-	w = ShellWindow(root, cnf)
-	w.pack({'expand': 1, 'fill': 'both'})
+	if shell:
+	    w = ShellWindow(root, shell=shell)
+	else:
+	    w = ShellWindow(root)
+	w.pack(expand=1, fill=BOTH)
 	w.focus_set()
 	w.tk.mainloop()
 
diff --git a/Demo/tkinter/guido/dialog.py b/Demo/tkinter/guido/dialog.py
index 27cddf0..500a73d 100755
--- a/Demo/tkinter/guido/dialog.py
+++ b/Demo/tkinter/guido/dialog.py
@@ -5,55 +5,49 @@
 # Cf. Ousterhout, Tcl and the Tk Toolkit, Figs. 27.2-3, pp. 269-270.
 
 from Tkinter import *
+import sys
+
 
 def dialog(master, title, text, bitmap, default, *args):
 
     # 1. Create the top-level window and divide it into top
     # and bottom parts.
 
-    w = Toplevel(master, {'class': 'Dialog'})
+    w = Toplevel(master, class_='Dialog')
     w.title(title)
     w.iconname('Dialog')
 
-    top = Frame(w, {'relief': 'raised', 'bd': 1,
-		    Pack: {'side': 'top', 'fill': 'both'}})
-    bot = Frame(w, {'relief': 'raised', 'bd': 1,
-		    Pack: {'side': 'bottom', 'fill': 'both'}})
+    top = Frame(w, relief=RAISED, borderwidth=1)
+    top.pack(side=TOP, fill=BOTH)
+    bot = Frame(w, relief=RAISED, borderwidth=1)
+    bot.pack(side=BOTTOM, fill=BOTH)
 
     # 2. Fill the top part with the bitmap and message.
 
-    msg = Message(top,
-		  {'width': '3i',
-		   'text': text,
-		   'font': '-Adobe-Times-Medium-R-Normal-*-180-*',
-		   Pack: {'side': 'right', 'expand': 1,
-			  'fill': 'both',
-			  'padx': '3m', 'pady': '3m'}})
+    msg = Message(top, width='3i', text=text,
+		  font='-Adobe-Times-Medium-R-Normal-*-180-*')
+    msg.pack(side=RIGHT, expand=1, fill=BOTH, padx='3m', pady='3m')
     if bitmap:
-	bm = Label(top, {'bitmap': bitmap,
-			 Pack: {'side': 'left',
-				'padx': '3m', 'pady': '3m'}})
+	bm = Label(top, bitmap=bitmap)
+	bm.pack(side=LEFT, padx='3m', pady='3m')
 
     # 3. Create a row of buttons at the bottom of the dialog.
 
+    var = IntVar()
     buttons = []
     i = 0
     for but in args:
-	b = Button(bot, {'text': but,
-			 'command': ('set', 'button', i)})
+	b = Button(bot, text=but, command=lambda v=var,i=i: v.set(i))
 	buttons.append(b)
 	if i == default:
-	    bd = Frame(bot, {'relief': 'sunken', 'bd': 1,
-			     Pack: {'side': 'left', 'expand': 1,
-				    'padx': '3m', 'pady': '2m'}})
+	    bd = Frame(bot, relief=SUNKEN, borderwidth=1)
+	    bd.pack(side=LEFT, expand=1, padx='3m', pady='2m')
 	    b.lift()
-	    b.pack ({'in': bd, 'side': 'left',
-		     'padx': '2m', 'pady': '2m',
-		     'ipadx': '2m', 'ipady': '1m'})
+	    b.pack (in_=bd, side=LEFT,
+		    padx='2m', pady='2m', ipadx='2m', ipady='1m')
 	else:
-	    b.pack ({'side': 'left', 'expand': 1,
-		     'padx': '3m', 'pady': '3m',
-		     'ipady': '2m', 'ipady': '1m'})
+	    b.pack (side=LEFT, expand=1,
+		    padx='3m', pady='3m', ipady='2m', ipady='1m')
 	i = i+1
 
     # 4. Set up a binding for <Return>, if there's a default,
@@ -61,21 +55,21 @@
 
     if default >= 0:
 	w.bind('<Return>',
-	       lambda e, b=buttons[default], i=default:
+	       lambda e, b=buttons[default], v=var, i=default:
 	       (b.flash(),
-		b.setvar('button', i)))
+		v.set(i)))
 
-    oldFocus = w.tk.call('focus') # XXX
+    oldFocus = w.focus_get()
     w.grab_set()
-    w.focus()
+    w.focus_set()
 
     # 5. Wait for the user to respond, then restore the focus
     # and return the index of the selected button.
 
-    w.waitvar('button')
+    w.waitvar(var)
     w.destroy()
-    w.tk.call('focus', oldFocus) # XXX
-    return w.getint(w.getvar('button'))
+    if oldFocus: oldFocus.focus_set()
+    return var.get()
 
 # The rest is the test program.
 
@@ -105,13 +99,10 @@
     global mainWidget
     mainWidget = Frame()
     Pack.config(mainWidget)
-    start = Button(mainWidget,
-		   {'text': 'Press Here To Start', 'command': go})
+    start = Button(mainWidget, text='Press Here To Start', command=go)
     start.pack()
-    endit = Button(mainWidget,
-		   {'text': 'Exit',
-		    'command': 'exit',
-		    Pack: {'fill' : 'both'}})
+    endit = Button(mainWidget, text="Exit", command=sys.exit)
+    endit.pack(fill=BOTH)
     mainWidget.mainloop()
 
 if __name__ == '__main__':
diff --git a/Demo/tkinter/guido/electrons.py b/Demo/tkinter/guido/electrons.py
index 5f6c8b5..7296955 100755
--- a/Demo/tkinter/guido/electrons.py
+++ b/Demo/tkinter/guido/electrons.py
@@ -15,7 +15,6 @@
 from Tkinter import *
 
 
-
 # The graphical interface
 class Electrons:
 
@@ -30,14 +29,13 @@
 		# Add background bitmap
 		if bitmap:
 			self.bitmap = c.create_bitmap(width/2, height/2,
-						      {'bitmap': bitmap,
-						       'foreground': 'blue'})
+						      bitmap=bitmap,
+						      foreground='blue')
 
 		self.pieces = {}
 		x1, y1, x2, y2 = 10,70,14,74
 		for i in range(n,0,-1):
-			p = c.create_oval(x1, y1, x2, y2,
-					       {'fill': 'red'})
+			p = c.create_oval(x1, y1, x2, y2, fill='red')
 			self.pieces[i] = p
 			y1, y2 = y1 +2, y2 + 2
 		self.tk.update()
@@ -51,11 +49,12 @@
 			y = rand.choice(range(-3,4))
 			c.move(p, x, y)
 		self.tk.update()
+
 	# Run -- never returns
 	def run(self):
 		while 1:
 			self.random_move(self.n)
-		self.tk.mainloop() # Hang around...
+
 
 # Main program
 def main():
diff --git a/Demo/tkinter/guido/hanoi.py b/Demo/tkinter/guido/hanoi.py
index 848e8e5..2cc4134 100755
--- a/Demo/tkinter/guido/hanoi.py
+++ b/Demo/tkinter/guido/hanoi.py
@@ -36,8 +36,8 @@
 		# Add background bitmap
 		if bitmap:
 			self.bitmap = c.create_bitmap(width/2, height/2,
-						      {'bitmap': bitmap,
-						       'foreground': 'blue'})
+						      bitmap=bitmap,
+						      foreground='blue')
 
 		# Generate pegs
 		pegwidth = 10
@@ -46,13 +46,13 @@
 		x1, y1 = (pegdist-pegwidth)/2, height*1/3
 		x2, y2 = x1+pegwidth, y1+pegheight
 		self.pegs = []
-		p = c.create_rectangle(x1, y1, x2, y2, {'fill': 'black'})
+		p = c.create_rectangle(x1, y1, x2, y2, fill='black')
 		self.pegs.append(p)
 		x1, x2 = x1+pegdist, x2+pegdist
-		p = c.create_rectangle(x1, y1, x2, y2, {'fill': 'black'})
+		p = c.create_rectangle(x1, y1, x2, y2, fill='black')
 		self.pegs.append(p)
 		x1, x2 = x1+pegdist, x2+pegdist
-		p = c.create_rectangle(x1, y1, x2, y2, {'fill': 'black'})
+		p = c.create_rectangle(x1, y1, x2, y2, fill='black')
 		self.pegs.append(p)
 		self.tk.update()
 
@@ -66,8 +66,7 @@
 		x2, y2 = x1+maxpiecewidth, y1+pieceheight
 		dx = (maxpiecewidth-minpiecewidth) / (2*max(1, n-1))
 		for i in range(n, 0, -1):
-			p = c.create_rectangle(x1, y1, x2, y2,
-					       {'fill': 'red'})
+			p = c.create_rectangle(x1, y1, x2, y2, fill='red')
 			self.pieces[i] = p
 			self.pegstate[0].append(i)
 			x1, x2 = x1 + dx, x2-dx
diff --git a/Demo/tkinter/guido/kill.py b/Demo/tkinter/guido/kill.py
index 8f45a29..24335cc 100755
--- a/Demo/tkinter/guido/kill.py
+++ b/Demo/tkinter/guido/kill.py
@@ -5,14 +5,14 @@
 from string import splitfields
 from string import split
 import commands
-import posix
+import os
 
 class BarButton(Menubutton):
-	_CNF = {Pack: {'side': 'left'}}
-	def __init__(self, master=None, cnf={}):
-		Menubutton.__init__(self, master, (self._CNF, cnf))
-		self.menu = Menu(self, {'name': 'menu'})
-		self['menu'] = self.menu		
+	def __init__(self, master=None, **cnf):
+		apply(Menubutton.__init__, (self, master), cnf)
+		self.pack(side=LEFT)
+		self.menu = Menu(self, name='menu')
+		self['menu'] = self.menu
 
 class Kill(Frame):
 	# List of (name, option, pid_column)
@@ -27,7 +27,7 @@
 	def kill(self, selected):
 		c = self.format_list[self.format.get()][2]
 		pid = split(selected)[c]
-		posix.system('kill' + ' -9 ' + pid)
+		os.system('kill -9 ' + pid)
 		self.do_update()
 	def do_update(self):
 		name, option, column = self.format_list[self.format.get()]
@@ -35,85 +35,64 @@
 		list = splitfields(s, '\n')
 		self.header.set(list[0])
 		del list[0]
-		y = self.frame.vscroll.get()[2]
+		y = self.frame.vscroll.get()[0]
 		self.frame.list.delete(0, AtEnd())
 		for line in list:
 			self.frame.list.insert(0, line)
-		self.frame.list.yview(y)
+		self.frame.list.yview(int(y))
 	def do_motion(self, e):
-		e.widget.select_from(e.widget.nearest(e.y))
+		e.widget.select_clear(0, END)
+		e.widget.select_set(e.widget.nearest(e.y))
 	def do_leave(self, e):
-		e.widget.select_clear()
+		e.widget.select_clear(0, END)
 	def do_1(self, e):
 		self.kill(e.widget.get(e.widget.nearest(e.y)))
-	def __init__(self, master=None, cnf={}):
+	def __init__(self, master=None, **cnf):
 		Frame.__init__(self, master, cnf)
-		self.pack({'expand': 'yes', 'fill': 'both'})
-		self.bar = Frame(
-			self,
-			{'name': 'bar',
-			 'relief': 'raised',
-			 'bd': 2,
-			 Pack: {'side': 'top',
-				'fill': 'x'}})
-		self.bar.file = BarButton(self.bar, {'text': 'File'})
+		self.pack(expand=1, fill=BOTH)
+		self.bar = Frame(self, name='bar', relief=RAISED,
+				 borderwidth=2)
+		self.bar.pack(fill=X)
+		self.bar.file = BarButton(self.bar, text='File')
 		self.bar.file.menu.add_command(
-			{'label': 'Quit', 'command': self.quit})
-		self.bar.view = BarButton(self.bar, {'text': 'View'})
+			label='Quit', command=self.quit)
+		self.bar.view = BarButton(self.bar, text='View')
 		self.format = IntVar(self)
 		self.format.set(2)
 		for num in range(len(self.format_list)):
 			self.bar.view.menu.add_radiobutton(
-				{'label': self.format_list[num][0], 
-				 'command': self.do_update,
-				 'variable': self.format,
-				 'value': num})
+				label=self.format_list[num][0], 
+				command=self.do_update,
+				variable=self.format,
+				value=num)
 		#self.bar.view.menu.add_separator()
 		#XXX ...
 		self.bar.tk_menuBar(self.bar.file, self.bar.view)
-		self.frame = Frame(
-			self, 
-			{'relief': 'raised', 'bd': 2,
-			 Pack: {'side': 'top',
-				'expand': 'yes',
-				'fill': 'both'}})
+		self.frame = Frame(self, relief=RAISED, borderwidth=2)
+		self.frame.pack(expand=1, fill=BOTH)
 		self.header = StringVar(self)
-		self.frame.label = Label(
-			self.frame, 
-			{'relief': 'flat',
-			 'anchor': 'nw',
-			 'borderwidth': 0,
-			 'textvariable': self.header,
-			 Pack: {'side': 'top', 
-			 	'fill': 'x'}})
-		self.frame.vscroll = Scrollbar(
-			self.frame,
-			{'orient': 'vertical'})
-		self.frame.list = Listbox(
-			self.frame, 
-			{'relief': 'sunken',
-			 'selectbackground': '#eed5b7',
-			 'selectborderwidth': 0,
-			 'yscroll': self.frame.vscroll.set})
+		self.frame.label = Label(self.frame, relief=FLAT, anchor=NW,
+					 borderwidth=0,
+					 textvariable=self.header)
+		self.frame.label.pack(fill=X)
+		self.frame.vscroll = Scrollbar(self.frame, orient=VERTICAL)
+		self.frame.list = Listbox(self.frame, relief=SUNKEN,
+					  selectbackground='#eed5b7',
+					  selectborderwidth=0,
+					  yscroll=self.frame.vscroll.set)
 		self.frame.vscroll['command'] = self.frame.list.yview
-		self.frame.vscroll.pack({'side': 'right', 'fill': 'y'})
-		self.frame.list.pack(
-			{'side': 'top',
-			 'expand': 'yes',
-			 'fill': 'both'})
-		self.update = Button(
-			self,
-			{'text': 'Update',
-			 'command': self.do_update,
-			 Pack: {'expand': 'yes',
-				'fill': 'x'}})
+		self.frame.vscroll.pack(side=RIGHT, fill=Y)
+		self.frame.list.pack(expand=1, fill=BOTH)
+		self.update = Button(self, text="Update",
+				     command=self.do_update)
+		self.update.pack(expand=1, fill=X)
 		self.frame.list.bind('<Motion>', self.do_motion)
 		self.frame.list.bind('<Leave>', self.do_leave)
 		self.frame.list.bind('<1>', self.do_1)
 		self.do_update()
 
 if __name__ == '__main__':
-	kill = Kill(None, {'bd': 5})
+	kill = Kill(None, borderwidth=5)
 	kill.winfo_toplevel().title('Tkinter Process Killer')
 	kill.winfo_toplevel().minsize(1, 1)
 	kill.mainloop()
diff --git a/Demo/tkinter/guido/listtree.py b/Demo/tkinter/guido/listtree.py
index c5e3bc5..523f209 100755
--- a/Demo/tkinter/guido/listtree.py
+++ b/Demo/tkinter/guido/listtree.py
@@ -6,16 +6,16 @@
 from Tkinter import *
 
 def listtree(master, app):
-	list = Listbox(master, {'name': 'list',
-				Pack: {'expand': 1, 'fill': 'both'}})
+	list = Listbox(master, name='list')
+	list.pack(expand=1, fill=BOTH)
 	listnodes(list, app, '.', 0)
 	return list
 
 def listnodes(list, app, widget, level):
 	klass = list.send(app, 'winfo', 'class', widget)
 ##	i = string.rindex(widget, '.')
-##	list.insert('end', '%s%s (%s)' % ((level-1)*'.   ', widget[i:], klass))
-	list.insert('end', '%s (%s)' % (widget, klass))
+##	list.insert(END, '%s%s (%s)' % ((level-1)*'.   ', widget[i:], klass))
+	list.insert(END, '%s (%s)' % (widget, klass))
 	children = list.tk.splitlist(
 		list.send(app, 'winfo', 'children', widget))
 	for c in children:
@@ -28,7 +28,8 @@
 	app = sys.argv[1]
 	tk = Tk()
 	tk.minsize(1, 1)
-	f = Frame(tk, {'name': 'f', Pack: {'expand': 1, 'fill': 'both'}})
+	f = Frame(tk, name='f')
+	f.pack(expand=1, fill=BOTH)
 	list = listtree(f, app)
 	tk.mainloop()
 
diff --git a/Demo/tkinter/guido/svkill.py b/Demo/tkinter/guido/svkill.py
index 2881afd..dd80856 100755
--- a/Demo/tkinter/guido/svkill.py
+++ b/Demo/tkinter/guido/svkill.py
@@ -15,10 +15,10 @@
 user = os.environ['LOGNAME']
 
 class BarButton(Menubutton):
-	def __init__(self, master=None, cnf={}):
-		Menubutton.__init__(self, master, cnf)
-		self.pack(side='left')
-		self.menu = Menu(self, {'name': 'menu'})
+	def __init__(self, master=None, **cnf):
+		apply(Menubutton.__init__, (self, master), cnf)
+		self.pack(side=LEFT)
+		self.menu = Menu(self, name='menu')
 		self['menu'] = self.menu		
 
 class Kill(Frame):
@@ -41,7 +41,7 @@
 	def kill(self, selected):
 		c = self.format_list[self.format.get()][2]
 		pid = split(selected)[c]
-		os.system('kill' + ' -9 ' + pid)
+		os.system('kill -9 ' + pid)
 		self.do_update()
 	def do_update(self):
 		format = self.format_list[self.format.get()][1]
@@ -60,21 +60,17 @@
 		e.widget.select_clear('0', 'end')
 	def do_1(self, e):
 		self.kill(e.widget.get(e.widget.nearest(e.y)))
-	def __init__(self, master=None, cnf={}):
-		Frame.__init__(self, master, cnf)
-		self.pack({'expand': 'yes', 'fill': 'both'})
-		self.bar = Frame(
-			self,
-			{'name': 'bar',
-			 'relief': 'raised',
-			 'bd': 2,
-			 Pack: {'side': 'top',
-				'fill': 'x'}})
-		self.bar.file = BarButton(self.bar, {'text': 'File'})
+	def __init__(self, master=None, **cnf):
+		apply(Frame.__init__, (self, master), cnf)
+		self.pack(expand=1, fill=BOTH)
+		self.bar = Frame(self, name='bar', relief=RAISED,
+				 borderwidth=2)
+		self.bar.pack(fill=X)
+		self.bar.file = BarButton(self.bar, text='File')
 		self.bar.file.menu.add_command(
-			{'label': 'Quit', 'command': self.quit})
-		self.bar.view = BarButton(self.bar, {'text': 'View'})
-		self.bar.format = BarButton(self.bar, {'text': 'Format'})
+			label='Quit', command=self.quit)
+		self.bar.view = BarButton(self.bar, text='View')
+		self.bar.format = BarButton(self.bar, text='Format')
 		self.view = IntVar(self)
 		self.view.set(0)
 		self.format = IntVar(self)
@@ -82,68 +78,51 @@
 		for num in range(len(self.view_list)):
 			label, option = self.view_list[num]
 			self.bar.view.menu.add_radiobutton(
-				{'label': label,
-				 'command': self.do_update,
-				 'variable': self.view,
-				 'value': num})
+				label=label,
+				command=self.do_update,
+				variable=self.view,
+				value=num)
 		for num in range(len(self.format_list)):
 			label, option, col = self.format_list[num]
 			self.bar.format.menu.add_radiobutton(
-				{'label': label,
-				 'command': self.do_update,
-				 'variable': self.format,
-				 'value': num})
+				label=label,
+				command=self.do_update,
+				variable=self.format,
+				value=num)
 		self.bar.tk_menuBar(self.bar.file,
 				    self.bar.view,
 				    self.bar.format)
-		self.frame = Frame(
-			self, 
-			{'relief': 'raised', 'bd': 2,
-			 Pack: {'side': 'top',
-				'expand': 'yes',
-				'fill': 'both'}})
+		self.frame = Frame(self, relief=RAISED, borderwidth=2)
+		self.frame.pack(expand=1, fill=BOTH)
 		self.header = StringVar(self)
 		self.frame.label = Label(
-			self.frame, 
-			{'relief': 'flat',
-			 'anchor': 'nw',
-			 'borderwidth': 0,
-			 'font': '*-Courier-Bold-R-Normal-*-120-*',
-			 'textvariable': self.header,
-			 Pack: {'side': 'top', 
-			 	'fill': 'y',
-				'anchor': 'w'}})
-		self.frame.vscroll = Scrollbar(
-			self.frame,
-			{'orient': 'vertical'})
+			self.frame, relief=FLAT, anchor=NW, borderwidth=0,
+			font='*-Courier-Bold-R-Normal-*-120-*',
+			textvariable=self.header)
+		self.frame.label.pack(fill=Y, anchor=W)
+		self.frame.vscroll = Scrollbar(self.frame, orient=VERTICAL)
 		self.frame.list = Listbox(
 			self.frame, 
-			{'relief': 'sunken',
-			 'font': '*-Courier-Medium-R-Normal-*-120-*',
-			 'width': 40, 'height': 10,
-			 'selectbackground': '#eed5b7',
-			 'selectborderwidth': 0,
-			 'selectmode': 'browse',
-			 'yscroll': self.frame.vscroll.set})
+			relief=SUNKEN,
+			font='*-Courier-Medium-R-Normal-*-120-*',
+			width=40, height=10,
+			selectbackground='#eed5b7',
+			selectborderwidth=0,
+			selectmode=BROWSE,
+			yscroll=self.frame.vscroll.set)
 		self.frame.vscroll['command'] = self.frame.list.yview
-		self.frame.vscroll.pack({'side': 'right', 'fill': 'y'})
-		self.frame.list.pack(
-			{'side': 'top',
-			 'expand': 'yes',
-			 'fill': 'both'})
-		self.update = Button(
-			self,
-			{'text': 'Update',
-			 'command': self.do_update,
-			 Pack: {'expand': 'no',
-				'fill': 'x'}})
+		self.frame.vscroll.pack(side=RIGHT, fill=Y)
+		self.frame.list.pack(expand=1, fill=BOTH)
+		self.update = Button(self, text='Update',
+				     command=self.do_update)
+		self.update.pack(fill=X)
 		self.frame.list.bind('<Motion>', self.do_motion)
 		self.frame.list.bind('<Leave>', self.do_leave)
 		self.frame.list.bind('<1>', self.do_1)
 		self.do_update()
 
 if __name__ == '__main__':
-	kill = Kill(None, {'bd': 5})
+	kill = Kill(None, borderwidth=5)
 	kill.winfo_toplevel().title('Tkinter Process Killer (SYSV)')
 	kill.winfo_toplevel().minsize(1, 1)
 	kill.mainloop()
diff --git a/Demo/tkinter/guido/tkman.py b/Demo/tkinter/guido/tkman.py
index cd60487..34ca4a3 100755
--- a/Demo/tkinter/guido/tkman.py
+++ b/Demo/tkinter/guido/tkman.py
@@ -1,4 +1,3 @@
-#! /home/guido/bin.sgi/python
 #! /usr/local/bin/python
 
 # Tk man page browser -- currently only shows the Tcl/Tk man pages
@@ -32,81 +31,66 @@
 	def __init__(self, master=None):
 		self.choices = []
 
-		self.frame = Frame(master, {
-			'name': 'frame',
-			Pack: {'expand': 1, 'fill': 'both'}})
+		self.frame = Frame(master, name="frame")
+		self.frame.pack(expand=1, fill=BOTH)
 		self.master = self.frame.master
-		self.subframe = Frame(self.frame, {
-			'name': 'subframe',
-			Pack: {'expand': 0, 'fill': 'both'}})
-		self.leftsubframe = Frame(self.subframe, {
-			'name': 'leftsubframe',
-			Pack: {'side': 'left', 'expand': 1, 'fill': 'both'}})
-		self.rightsubframe = Frame(self.subframe, {
-			'name': 'rightsubframe',
-			Pack: {'side': 'right', 'expand': 1, 'fill': 'both'}})
+		self.subframe = Frame(self.frame, name="subframe")
+		self.subframe.pack(expand=0, fill=BOTH)
+		self.leftsubframe = Frame(self.subframe, name='leftsubframe')
+		self.leftsubframe.pack(side=LEFT, expand=1, fill=BOTH)
+		self.rightsubframe = Frame(self.subframe, name='rightsubframe')
+		self.rightsubframe.pack(side=RIGHT, expand=1, fill=BOTH)
 		self.chaptervar = StringVar(master)
-		self.chapter = Menubutton(self.rightsubframe,
-					  {'name': 'chapter',
-					   'text': 'Directory',
-					   'relief': 'raised', 'bd': 2,
-					   Pack: {'side': 'top'}})
-		self.chaptermenu = Menu(self.chapter, {'name': 'chaptermenu'})
-		self.chaptermenu.add_radiobutton({'label': 'C functions',
-						  'value': MAN3DIR,
-						  'variable': self.chaptervar,
-						  'command': self.newchapter})
-		self.chaptermenu.add_radiobutton({'label': 'Tcl/Tk functions',
-						  'value': MANNDIR,
-						  'variable': self.chaptervar,
-						  'command': self.newchapter})
+		self.chapter = Menubutton(self.rightsubframe, name='chapter',
+					  text='Directory', relief=RAISED,
+					  borderwidth=2)
+		self.chapter.pack(side=TOP)
+		self.chaptermenu = Menu(self.chapter, name='chaptermenu')
+		self.chaptermenu.add_radiobutton(label='C functions',
+						 value=MAN3DIR,
+						 variable=self.chaptervar,
+						 command=self.newchapter)
+		self.chaptermenu.add_radiobutton(label='Tcl/Tk functions',
+						 value=MANNDIR,
+						 variable=self.chaptervar,
+						 command=self.newchapter)
 		self.chapter['menu'] = self.chaptermenu
-		self.listbox = Listbox(self.rightsubframe,
-				       {'name': 'listbox',
-					'relief': 'sunken', 'bd': 2,
-					'width': 20, 'height': 5,
-					Pack: {'expand': 1, 'fill': 'both'}})
-		self.l1 = Button(self.leftsubframe,
-				{'name': 'l1',
-				 'text': 'Display manual page named:',
-				 'command': self.entry_cb,
-				 Pack: {'side': 'top'}})
-		self.entry = Entry(self.leftsubframe,
-				   {'name': 'entry',
-				    'relief': 'sunken', 'bd': 2,
-				    'width': 20,
-				    Pack: {'side': 'top',
-					   'expand': 0, 'fill': 'x'}})
-		self.l2frame = Frame(self.leftsubframe,
-				     {'name': 'l2frame',
-				      Pack: {'expand': 0, 'fill': 'none'}})
-		self.l2 = Button(self.l2frame,
-				{'name': 'l2',
-				 'text': 'Search regexp:',
-				 'command': self.search_cb,
-				 Pack: {'side': 'left'}})
-		self.casesense = Checkbutton(self.l2frame,
-					     {'name': 'casesense',
-					      'text': 'Case sensitive',
-					      'variable': 'casesense',
-					      'relief': 'flat',
-					      Pack: {'side': 'left'}})
-		self.search = Entry(self.leftsubframe,
-				   {'name': 'search',
-				    'relief': 'sunken', 'bd': 2,
-				    'width': 20,
-				    Pack: {'side': 'top',
-					   'expand': 0, 'fill': 'x'}})
-		self.title = Label(self.leftsubframe,
-				   {'name': 'title',
-				    'text': '(none)',
-				    Pack: {'side': 'bottom'}})
-		self.text = ManPage(self.frame,
-					 {'name': 'text',
-					  'relief': 'sunken', 'bd': 2,
-					  'wrap': 'none', 'width': 72,
-					  'selectbackground': 'pink',
-					  Pack: {'expand': 1, 'fill': 'both'}})
+		self.listbox = Listbox(self.rightsubframe, name='listbox',
+				       relief=SUNKEN, borderwidth=2,
+				       width=20, height=5)
+		self.listbox.pack(expand=1, fill=BOTH)
+		self.l1 = Button(self.leftsubframe, name='l1',
+				 text='Display manual page named:',
+				 command=self.entry_cb)
+		self.l1.pack(side=TOP)
+		self.entry = Entry(self.leftsubframe, name='entry',
+				    relief=SUNKEN, borderwidth=2,
+				    width=20)
+		self.entry.pack(expand=0, fill=X)
+		self.l2frame = Frame(self.leftsubframe, name='l2frame')
+		self.l2frame.pack(expand=0, fill=NONE)
+		self.l2 = Button(self.l2frame, name='l2',
+				 text='Search regexp:',
+				 command=self.search_cb)
+		self.l2.pack(side=LEFT)
+		self.casevar = BooleanVar()
+		self.casesense = Checkbutton(self.l2frame, name='casesense',
+					     text='Case sensitive',
+					     variable=self.casevar,
+					     relief=FLAT)
+		self.casesense.pack(side=LEFT)
+		self.search = Entry(self.leftsubframe, name='search',
+				    relief=SUNKEN, borderwidth=2,
+				    width=20)
+		self.search.pack(expand=0, fill=X)
+		self.title = Label(self.leftsubframe, name='title',
+				   text='(none)')
+		self.title.pack(side=BOTTOM)
+		self.text = ManPage(self.frame, name='text',
+				    relief=SUNKEN, borderwidth=2,
+				    wrap=NONE, width=72,
+				    selectbackground='pink')
+		self.text.pack(expand=1, fill=BOTH)
 
 		self.entry.bind('<Return>', self.entry_cb)
 		self.search.bind('<Return>', self.search_cb)
@@ -195,7 +179,7 @@
 			self.frame.bell()
 			print 'Empty search string'
 			return
-		if self.frame.tk.getvar('casesense') != '1':
+		if not self.casevar.get():
 			map = regex.casefold
 		else:
 			map = None