diff --git a/Demo/tkinter/guido/AttrDialog.py b/Demo/tkinter/guido/AttrDialog.py
index d8b2571..98bdd14 100755
--- a/Demo/tkinter/guido/AttrDialog.py
+++ b/Demo/tkinter/guido/AttrDialog.py
@@ -112,7 +112,7 @@
     def addchoices(self):
         self.choices = {}
         list = []
-        for k, dc in self.options.items():
+        for k, dc in list(self.options.items()):
             list.append((k, dc))
         list.sort()
         for k, (d, c) in list:
@@ -157,7 +157,7 @@
             try:
                 self.dialog.widget.pack(**{self.option: self.current})
             except TclError as msg:
-                print msg
+                print(msg)
                 self.refresh()
 
     class booleanoption(packoption, BooleanOption): pass
@@ -213,7 +213,7 @@
                                      'info',
                                      self.widget))
         except TclError as msg:
-            print msg
+            print(msg)
             return
         dict = {}
         for i in range(0, len(words), 2):
@@ -240,7 +240,7 @@
                         self.dialog.master.tk.merge(
                                 self.current))
             except TclError as msg:
-                print msg
+                print(msg)
                 self.refresh()
 
     class booleanoption(remotepackoption, BooleanOption): pass
@@ -256,11 +256,11 @@
         Dialog.__init__(self, widget)
 
     def fixclasses(self):
-        if self.addclasses.has_key(self.klass):
+        if self.klass in self.addclasses:
             classes = {}
             for c in (self.classes,
                       self.addclasses[self.klass]):
-                for k in c.keys():
+                for k in list(c.keys()):
                     classes[k] = c[k]
             self.classes = classes
 
@@ -273,7 +273,7 @@
     def update(self):
         self.current = {}
         self.options = {}
-        for k, v in self.configuration.items():
+        for k, v in list(self.configuration.items()):
             if len(v) > 4:
                 self.current[k] = v[4]
                 self.options[k] = v[3], v[2] # default, klass
@@ -286,7 +286,7 @@
             try:
                 self.dialog.widget[self.option] = self.current
             except TclError as msg:
-                print msg
+                print(msg)
                 self.refresh()
 
     class booleanoption(widgetoption, BooleanOption): pass
@@ -375,7 +375,7 @@
                                      self.widget,
                                      'config'))
         except TclError as msg:
-            print msg
+            print(msg)
             return
         dict = {}
         for item in items:
@@ -399,7 +399,7 @@
                         '-'+self.option,
                         self.current)
             except TclError as msg:
-                print msg
+                print(msg)
                 self.refresh()
 
     class booleanoption(remotewidgetoption, BooleanOption): pass
@@ -446,6 +446,6 @@
         try:
             RemotePackDialog(list, list.app, widget)
         except TclError as msg:
-            print msg
+            print(msg)
 
 test()
diff --git a/Demo/tkinter/guido/ManPage.py b/Demo/tkinter/guido/ManPage.py
index b189b64..1266f1c 100755
--- a/Demo/tkinter/guido/ManPage.py
+++ b/Demo/tkinter/guido/ManPage.py
@@ -75,7 +75,7 @@
     # Initialize parsing from a particular file -- must not be busy
     def _startparser(self, fp):
         if self.busy():
-            raise RuntimeError, 'startparser: still busy'
+            raise RuntimeError('startparser: still busy')
         fp.fileno()             # Test for file-ness
         self.fp = fp
         self.lineno = 0
@@ -90,7 +90,7 @@
     # End parsing -- must be busy, need not be at EOF
     def _endparser(self):
         if not self.busy():
-            raise RuntimeError, 'endparser: not busy'
+            raise RuntimeError('endparser: not busy')
         if self.buffer:
             self._parseline('')
         try:
diff --git a/Demo/tkinter/guido/ShellWindow.py b/Demo/tkinter/guido/ShellWindow.py
index 104e06d..d7e0a0e 100755
--- a/Demo/tkinter/guido/ShellWindow.py
+++ b/Demo/tkinter/guido/ShellWindow.py
@@ -37,7 +37,7 @@
         if not data:
             self.tk.deletefilehandler(file)
             pid, sts = os.waitpid(self.pid, 0)
-            print 'pid', pid, 'status', sts
+            print('pid', pid, 'status', sts)
             self.pid = None
             detail = sts>>8
             cause = sts & 0xff
diff --git a/Demo/tkinter/guido/dialog.py b/Demo/tkinter/guido/dialog.py
index 50d84b9..426eca4 100755
--- a/Demo/tkinter/guido/dialog.py
+++ b/Demo/tkinter/guido/dialog.py
@@ -81,7 +81,7 @@
                '',
                -1,
                'OK')
-    print 'pressed button', i
+    print('pressed button', i)
     i = dialog(mainWidget,
                'File Modified',
                'File "tcl.h" has been modified since '
@@ -92,7 +92,7 @@
                'Save File',
                'Discard Changes',
                'Return To Editor')
-    print 'pressed button', i
+    print('pressed button', i)
 
 def test():
     import sys
diff --git a/Demo/tkinter/guido/mbox.py b/Demo/tkinter/guido/mbox.py
index 47c38b9..88b0b89 100755
--- a/Demo/tkinter/guido/mbox.py
+++ b/Demo/tkinter/guido/mbox.py
@@ -28,7 +28,7 @@
     try:
         opts, args = getopt.getopt(sys.argv[1:], '')
     except getopt.error as msg:
-        print msg
+        print(msg)
         sys.exit(2)
     for arg in args:
         if arg[:1] == '+':
@@ -278,8 +278,6 @@
         scanbox.insert('end', line)
 
 def scanfolder(folder = 'inbox', sequence = 'all'):
-    return map(
-            lambda line: line[:-1],
-            os.popen('scan +%s %s' % (folder, sequence), 'r').readlines())
+    return [line[:-1] for line in os.popen('scan +%s %s' % (folder, sequence), 'r').readlines()]
 
 main()
diff --git a/Demo/tkinter/guido/rmt.py b/Demo/tkinter/guido/rmt.py
index 440650c..c177c72 100755
--- a/Demo/tkinter/guido/rmt.py
+++ b/Demo/tkinter/guido/rmt.py
@@ -134,7 +134,7 @@
     file_m_apps.add('command')
     file_m_apps.delete(0, 'last')
     names = root.winfo_interps()
-    names = map(None, names) # convert tuple to list
+    names = list(names) # convert tuple to list
     names.sort()
     for name in names:
         try:
diff --git a/Demo/tkinter/guido/solitaire.py b/Demo/tkinter/guido/solitaire.py
index 50a8b26..68dc284 100755
--- a/Demo/tkinter/guido/solitaire.py
+++ b/Demo/tkinter/guido/solitaire.py
@@ -80,7 +80,7 @@
 for s in (CLUBS, SPADES):
     COLOR[s] = BLACK
 
-ALLSUITS = COLOR.keys()
+ALLSUITS = list(COLOR.keys())
 NSUITS = len(ALLSUITS)
 
 
@@ -99,7 +99,7 @@
 # dummy element at index 0 so it can be indexed directly with the card
 # value.
 
-VALNAMES = ["", "A"] + map(str, range(2, 11)) + ["J", "Q", "K"]
+VALNAMES = ["", "A"] + list(map(str, range(2, 11))) + ["J", "Q", "K"]
 
 
 # Solitaire constants.  The only one I can think of is the number of
diff --git a/Demo/tkinter/guido/sortvisu.py b/Demo/tkinter/guido/sortvisu.py
index 3e4454f..c538a2c 100644
--- a/Demo/tkinter/guido/sortvisu.py
+++ b/Demo/tkinter/guido/sortvisu.py
@@ -344,7 +344,7 @@
 
 def interpolate(oldpts, newpts, n):
     if len(oldpts) != len(newpts):
-        raise ValueError, "can't interpolate arrays of different length"
+        raise ValueError("can't interpolate arrays of different length")
     pts = [0]*len(oldpts)
     res = [tuple(oldpts)]
     for i in range(1, n):
diff --git a/Demo/tkinter/guido/ss1.py b/Demo/tkinter/guido/ss1.py
index 8935475..d957907 100644
--- a/Demo/tkinter/guido/ss1.py
+++ b/Demo/tkinter/guido/ss1.py
@@ -136,13 +136,13 @@
         return maxx, maxy
 
     def reset(self):
-        for cell in self.cells.itervalues():
+        for cell in self.cells.values():
             if hasattr(cell, 'reset'):
                 cell.reset()
 
     def recalc(self):
         self.reset()
-        for cell in self.cells.itervalues():
+        for cell in self.cells.values():
             if hasattr(cell, 'recalc'):
                 cell.recalc(self.rexec)
 
@@ -160,7 +160,7 @@
             full[0, y] = text, alignment = str(y), RIGHT
             colwidth[0] = max(colwidth[0], len(text))
         # Add sheet cells in columns with x>0 and y>0
-        for (x, y), cell in self.cells.iteritems():
+        for (x, y), cell in self.cells.items():
             if x <= 0 or y <= 0:
                 continue
             if hasattr(cell, 'recalc'):
@@ -192,13 +192,13 @@
                 if line:
                     line += '|'
                 line += text
-            print line
+            print(line)
             if y == 0:
-                print sep
+                print(sep)
 
     def xml(self):
         out = ['<spreadsheet>']
-        for (x, y), cell in self.cells.iteritems():
+        for (x, y), cell in self.cells.items():
             if hasattr(cell, 'xml'):
                 cellxml = cell.xml()
             else:
@@ -236,7 +236,7 @@
     def startelement(self, tag, attrs):
         method = getattr(self, 'start_'+tag, None)
         if method:
-            for key, value in attrs.iteritems():
+            for key, value in attrs.items():
                 attrs[key] = str(value) # XXX Convert Unicode to 8-bit
             method(attrs)
         self.texts = []
@@ -268,7 +268,7 @@
 
     def end_long(self, text):
         try:
-            self.value = long(text)
+            self.value = int(text)
         except:
             self.value = None
 
@@ -325,7 +325,7 @@
 class NumericCell(BaseCell):
 
     def __init__(self, value, fmt="%s", alignment=RIGHT):
-        assert isinstance(value, (int, long, float, complex))
+        assert isinstance(value, (int, int, float, complex))
         assert alignment in (LEFT, CENTER, RIGHT)
         self.value = value
         self.fmt = fmt
@@ -366,7 +366,7 @@
 class StringCell(BaseCell):
 
     def __init__(self, text, fmt="%s", alignment=LEFT):
-        assert isinstance(text, (str, unicode))
+        assert isinstance(text, (str, str))
         assert alignment in (LEFT, CENTER, RIGHT)
         self.text = text
         self.fmt = fmt
@@ -699,7 +699,7 @@
             x1, x2 = x2, x1
         if y1 > y2:
             y1, y2 = y2, y1
-        for (x, y), cell in self.gridcells.iteritems():
+        for (x, y), cell in self.gridcells.items():
             if x1 <= x <= x2 and y1 <= y <= y2:
                 cell['bg'] = 'lightBlue'
         gridcell = self.gridcells.get(self.currentxy)
@@ -735,7 +735,7 @@
                 x1, x2 = x2, x1
             if y1 > y2:
                 y1, y2 = y2, y1
-            for (x, y), cell in self.gridcells.iteritems():
+            for (x, y), cell in self.gridcells.items():
                 if x1 <= x <= x2 and y1 <= y <= y2:
                     cell['bg'] = 'white'
 
@@ -775,7 +775,7 @@
         if text.startswith('='):
             cell = FormulaCell(text[1:])
         else:
-            for cls in int, long, float, complex:
+            for cls in int, int, float, complex:
                 try:
                     value = cls(text)
                 except:
@@ -794,7 +794,7 @@
     def sync(self):
         "Fill the GUI cells from the sheet cells."
         self.sheet.recalc()
-        for (x, y), gridcell in self.gridcells.iteritems():
+        for (x, y), gridcell in self.gridcells.items():
             if x == 0 or y == 0:
                 continue
             cell = self.sheet.getcell(x, y)
diff --git a/Demo/tkinter/guido/svkill.py b/Demo/tkinter/guido/svkill.py
index 95f61b8..378d58f 100755
--- a/Demo/tkinter/guido/svkill.py
+++ b/Demo/tkinter/guido/svkill.py
@@ -5,7 +5,7 @@
 from Tkinter import *
 
 if TkVersion < 4.0:
-    raise ImportError, "This version of svkill requires Tk 4.0 or later"
+    raise ImportError("This version of svkill requires Tk 4.0 or later")
 
 from string import splitfields
 from string import split
diff --git a/Demo/tkinter/guido/tkman.py b/Demo/tkinter/guido/tkman.py
index 810bdf8..c84d889 100755
--- a/Demo/tkinter/guido/tkman.py
+++ b/Demo/tkinter/guido/tkman.py
@@ -172,8 +172,8 @@
 
     def updatelist(self):
         key = self.entry.get()
-        ok = filter(lambda name, key=key, n=len(key): name[:n]==key,
-                 self.choices)
+        ok = list(filter(lambda name, key=key, n=len(key): name[:n]==key,
+                 self.choices))
         if not ok:
             self.frame.bell()
         self.listbox.delete(0, AtEnd())
@@ -205,7 +205,7 @@
     def search_string(self, search):
         if not search:
             self.frame.bell()
-            print 'Empty search string'
+            print('Empty search string')
             return
         if not self.casevar.get():
             map = re.IGNORECASE
@@ -218,7 +218,7 @@
                 prog = re.compile(search)
         except re.error as msg:
             self.frame.bell()
-            print 'Regex error:', msg
+            print('Regex error:', msg)
             return
         here = self.text.index(AtInsert())
         lineno = string.atoi(here[:string.find(here, '.')])
diff --git a/Demo/tkinter/guido/wish.py b/Demo/tkinter/guido/wish.py
index 2367e25..bebab1e 100755
--- a/Demo/tkinter/guido/wish.py
+++ b/Demo/tkinter/guido/wish.py
@@ -24,7 +24,7 @@
         try:
             result = tk.call('eval', cmd)
         except _tkinter.TclError as msg:
-            print 'TclError:', msg
+            print('TclError:', msg)
         else:
-            if result: print result
+            if result: print(result)
         cmd = ''
diff --git a/Demo/tkinter/matt/00-HELLO-WORLD.py b/Demo/tkinter/matt/00-HELLO-WORLD.py
index 1c3151b..20a2050 100644
--- a/Demo/tkinter/matt/00-HELLO-WORLD.py
+++ b/Demo/tkinter/matt/00-HELLO-WORLD.py
@@ -5,7 +5,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
         self.QUIT = Button(self, text='QUIT', foreground='red',
diff --git a/Demo/tkinter/matt/animation-simple.py b/Demo/tkinter/matt/animation-simple.py
index b52e1dc..071bde7 100644
--- a/Demo/tkinter/matt/animation-simple.py
+++ b/Demo/tkinter/matt/animation-simple.py
@@ -4,7 +4,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
         self.QUIT = Button(self, text='QUIT', foreground='red',
diff --git a/Demo/tkinter/matt/animation-w-velocity-ctrl.py b/Demo/tkinter/matt/animation-w-velocity-ctrl.py
index e676338..68eb1d0 100644
--- a/Demo/tkinter/matt/animation-w-velocity-ctrl.py
+++ b/Demo/tkinter/matt/animation-w-velocity-ctrl.py
@@ -8,7 +8,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
         self.QUIT = Button(self, text='QUIT', foreground='red',
diff --git a/Demo/tkinter/matt/bind-w-mult-calls-p-type.py b/Demo/tkinter/matt/bind-w-mult-calls-p-type.py
index f3220da..f744d26 100644
--- a/Demo/tkinter/matt/bind-w-mult-calls-p-type.py
+++ b/Demo/tkinter/matt/bind-w-mult-calls-p-type.py
@@ -24,11 +24,11 @@
         self.entrythingy.bind('<Key-Return>', self.print_something_else, "+")
 
     def print_contents(self, event):
-        print "hi. contents of entry is now ---->", self.entrythingy.get()
+        print("hi. contents of entry is now ---->", self.entrythingy.get())
 
 
     def print_something_else(self, event):
-        print "hi. Now doing something completely different"
+        print("hi. Now doing something completely different")
 
 
 root = App()
diff --git a/Demo/tkinter/matt/canvas-demo-simple.py b/Demo/tkinter/matt/canvas-demo-simple.py
index a01679a..b677ccd 100644
--- a/Demo/tkinter/matt/canvas-demo-simple.py
+++ b/Demo/tkinter/matt/canvas-demo-simple.py
@@ -4,7 +4,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
         self.QUIT = Button(self, text='QUIT', foreground='red',
diff --git a/Demo/tkinter/matt/canvas-gridding.py b/Demo/tkinter/matt/canvas-gridding.py
index 3c52b91..84f4ea0 100644
--- a/Demo/tkinter/matt/canvas-gridding.py
+++ b/Demo/tkinter/matt/canvas-gridding.py
@@ -7,7 +7,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
         self.QUIT = Button(self, text='QUIT',
diff --git a/Demo/tkinter/matt/canvas-reading-tag-info.py b/Demo/tkinter/matt/canvas-reading-tag-info.py
index f57ea18..75990c9 100644
--- a/Demo/tkinter/matt/canvas-reading-tag-info.py
+++ b/Demo/tkinter/matt/canvas-reading-tag-info.py
@@ -3,7 +3,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
         self.QUIT = Button(self, text='QUIT', foreground='red',
@@ -28,14 +28,14 @@
         # is used for widgets. (remember, this is for ITEMS drawn
         # on a canvas widget, not widgets)
         option_value = self.drawing.itemconfig(pgon, "stipple")
-        print "pgon's current stipple value is -->", option_value[4], "<--"
+        print("pgon's current stipple value is -->", option_value[4], "<--")
         option_value = self.drawing.itemconfig(pgon,  "fill")
-        print "pgon's current fill value is -->", option_value[4], "<--"
-        print "  when he is usually colored -->", option_value[3], "<--"
+        print("pgon's current fill value is -->", option_value[4], "<--")
+        print("  when he is usually colored -->", option_value[3], "<--")
 
         ## here we print out all the tags associated with this object
         option_value = self.drawing.itemconfig(pgon,  "tags")
-        print "pgon's tags are", option_value[4]
+        print("pgon's tags are", option_value[4])
 
         self.drawing.pack(side=LEFT)
 
diff --git a/Demo/tkinter/matt/canvas-w-widget-draw-el.py b/Demo/tkinter/matt/canvas-w-widget-draw-el.py
index 5b26210..3cbf937 100644
--- a/Demo/tkinter/matt/canvas-w-widget-draw-el.py
+++ b/Demo/tkinter/matt/canvas-w-widget-draw-el.py
@@ -4,7 +4,7 @@
 
 class Test(Frame):
     def printhi(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
         self.QUIT = Button(self, text='QUIT', foreground='red',
diff --git a/Demo/tkinter/matt/canvas-with-scrollbars.py b/Demo/tkinter/matt/canvas-with-scrollbars.py
index 81ef25a..b55215d 100644
--- a/Demo/tkinter/matt/canvas-with-scrollbars.py
+++ b/Demo/tkinter/matt/canvas-with-scrollbars.py
@@ -7,7 +7,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
         self.question = Label(self, text="Can Find The BLUE Square??????")
@@ -46,8 +46,8 @@
 
 
     def scrollCanvasX(self, *args):
-        print "scrolling", args
-        print self.draw.scrollX.get()
+        print("scrolling", args)
+        print(self.draw.scrollX.get())
 
 
     def __init__(self, master=None):
diff --git a/Demo/tkinter/matt/dialog-box.py b/Demo/tkinter/matt/dialog-box.py
index dea8f39..0c71c3a 100644
--- a/Demo/tkinter/matt/dialog-box.py
+++ b/Demo/tkinter/matt/dialog-box.py
@@ -6,7 +6,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def makeWindow(self):
         """Create a top-level dialog with some buttons.
diff --git a/Demo/tkinter/matt/entry-simple.py b/Demo/tkinter/matt/entry-simple.py
index 5146e6f..0bf4cab 100644
--- a/Demo/tkinter/matt/entry-simple.py
+++ b/Demo/tkinter/matt/entry-simple.py
@@ -17,7 +17,7 @@
         self.entrythingy.bind('<Key-Return>', self.print_contents)
 
     def print_contents(self, event):
-        print "hi. contents of entry is now ---->", self.entrythingy.get()
+        print("hi. contents of entry is now ---->", self.entrythingy.get())
 
 root = App()
 root.master.title("Foo")
diff --git a/Demo/tkinter/matt/entry-with-shared-variable.py b/Demo/tkinter/matt/entry-with-shared-variable.py
index 2b76162..c7cd259 100644
--- a/Demo/tkinter/matt/entry-with-shared-variable.py
+++ b/Demo/tkinter/matt/entry-with-shared-variable.py
@@ -39,7 +39,7 @@
         self.contents.set(str)
 
     def print_contents(self, event):
-        print "hi. contents of entry is now ---->", self.contents.get()
+        print("hi. contents of entry is now ---->", self.contents.get())
 
 root = App()
 root.master.title("Foo")
diff --git a/Demo/tkinter/matt/killing-window-w-wm.py b/Demo/tkinter/matt/killing-window-w-wm.py
index 6a0e2fe..23ac103 100644
--- a/Demo/tkinter/matt/killing-window-w-wm.py
+++ b/Demo/tkinter/matt/killing-window-w-wm.py
@@ -7,11 +7,11 @@
 
 ### ******* this isn't really called -- read the comments
 def my_delete_callback():
-    print "whoops -- tried to delete me!"
+    print("whoops -- tried to delete me!")
 
 class Test(Frame):
     def deathHandler(self, event):
-        print self, "is now getting nuked. performing some save here...."
+        print(self, "is now getting nuked. performing some save here....")
 
     def createWidgets(self):
         # a hello button
diff --git a/Demo/tkinter/matt/menu-all-types-of-entries.py b/Demo/tkinter/matt/menu-all-types-of-entries.py
index f4afe4a..e4e4bfd 100644
--- a/Demo/tkinter/matt/menu-all-types-of-entries.py
+++ b/Demo/tkinter/matt/menu-all-types-of-entries.py
@@ -35,13 +35,13 @@
 
 # some miscellaneous callbacks
 def new_file():
-    print "opening new file"
+    print("opening new file")
 
 def open_file():
-    print "opening OLD file"
+    print("opening OLD file")
 
 def print_something():
-    print "picked a menu item"
+    print("picked a menu item")
 
 
 
@@ -50,7 +50,7 @@
 def print_anchovies():
     global anchovies
     anchovies = not anchovies
-    print "anchovies?", anchovies
+    print("anchovies?", anchovies)
 
 def makeCommandMenu():
     # make menu button
diff --git a/Demo/tkinter/matt/menu-simple.py b/Demo/tkinter/matt/menu-simple.py
index 46b5364..2487561 100644
--- a/Demo/tkinter/matt/menu-simple.py
+++ b/Demo/tkinter/matt/menu-simple.py
@@ -34,11 +34,11 @@
 
 
 def new_file():
-    print "opening new file"
+    print("opening new file")
 
 
 def open_file():
-    print "opening OLD file"
+    print("opening OLD file")
 
 
 def makeFileMenu():
diff --git a/Demo/tkinter/matt/packer-and-placer-together.py b/Demo/tkinter/matt/packer-and-placer-together.py
index 184d56b..84d3ee0 100644
--- a/Demo/tkinter/matt/packer-and-placer-together.py
+++ b/Demo/tkinter/matt/packer-and-placer-together.py
@@ -8,7 +8,7 @@
     app.button.place(x=event.x, y=event.y)
 
 def dothis():
-    print 'calling me!'
+    print('calling me!')
 
 def createWidgets(top):
     # make a frame. Note that the widget is 200 x 200
diff --git a/Demo/tkinter/matt/packer-simple.py b/Demo/tkinter/matt/packer-simple.py
index f55f1be..1a505dd 100644
--- a/Demo/tkinter/matt/packer-simple.py
+++ b/Demo/tkinter/matt/packer-simple.py
@@ -3,7 +3,7 @@
 
 class Test(Frame):
     def printit(self):
-        print self.hi_there["command"]
+        print(self.hi_there["command"])
 
     def createWidgets(self):
         # a hello button
diff --git a/Demo/tkinter/matt/placer-simple.py b/Demo/tkinter/matt/placer-simple.py
index 30d9e9e..992a8fc 100644
--- a/Demo/tkinter/matt/placer-simple.py
+++ b/Demo/tkinter/matt/placer-simple.py
@@ -6,7 +6,7 @@
     app.button.place(x=event.x, y=event.y)
 
 def dothis():
-    print 'calling me!'
+    print('calling me!')
 
 def createWidgets(top):
     # make a frame. Note that the widget is 200 x 200
diff --git a/Demo/tkinter/matt/printing-coords-of-items.py b/Demo/tkinter/matt/printing-coords-of-items.py
index a37733d..c74c1c3 100644
--- a/Demo/tkinter/matt/printing-coords-of-items.py
+++ b/Demo/tkinter/matt/printing-coords-of-items.py
@@ -35,7 +35,7 @@
         # the "current" tag is applied to the object the cursor is over.
         # this happens automatically.
         self.draw.itemconfig(CURRENT, fill="red")
-        print self.draw.coords(CURRENT)
+        print(self.draw.coords(CURRENT))
 
     def mouseLeave(self, event):
         # the "current" tag is applied to the object the cursor is over.
diff --git a/Demo/tkinter/matt/radiobutton-simple.py b/Demo/tkinter/matt/radiobutton-simple.py
index e9d6afe..eeddb23 100644
--- a/Demo/tkinter/matt/radiobutton-simple.py
+++ b/Demo/tkinter/matt/radiobutton-simple.py
@@ -12,7 +12,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
 
diff --git a/Demo/tkinter/matt/rubber-band-box-demo-1.py b/Demo/tkinter/matt/rubber-band-box-demo-1.py
index b00518e..66b8f8b 100644
--- a/Demo/tkinter/matt/rubber-band-box-demo-1.py
+++ b/Demo/tkinter/matt/rubber-band-box-demo-1.py
@@ -2,7 +2,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
         self.QUIT = Button(self, text='QUIT',
diff --git a/Demo/tkinter/matt/rubber-line-demo-1.py b/Demo/tkinter/matt/rubber-line-demo-1.py
index 59b8bd9..b1c8e78 100644
--- a/Demo/tkinter/matt/rubber-line-demo-1.py
+++ b/Demo/tkinter/matt/rubber-line-demo-1.py
@@ -2,7 +2,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def createWidgets(self):
         self.QUIT = Button(self, text='QUIT',
diff --git a/Demo/tkinter/matt/slider-demo-1.py b/Demo/tkinter/matt/slider-demo-1.py
index db6114b..5662db9 100644
--- a/Demo/tkinter/matt/slider-demo-1.py
+++ b/Demo/tkinter/matt/slider-demo-1.py
@@ -5,7 +5,7 @@
 
 class Test(Frame):
     def print_value(self, val):
-        print "slider now at", val
+        print("slider now at", val)
 
     def reset(self):
         self.slider.set(0)
diff --git a/Demo/tkinter/matt/subclass-existing-widgets.py b/Demo/tkinter/matt/subclass-existing-widgets.py
index 0e08f92..fc04859 100644
--- a/Demo/tkinter/matt/subclass-existing-widgets.py
+++ b/Demo/tkinter/matt/subclass-existing-widgets.py
@@ -5,7 +5,7 @@
 
 class New_Button(Button):
     def callback(self):
-        print self.counter
+        print(self.counter)
         self.counter = self.counter + 1
 
 def createWidgets(top):
diff --git a/Demo/tkinter/matt/two-radio-groups.py b/Demo/tkinter/matt/two-radio-groups.py
index 9fd8f4f..52513ba 100644
--- a/Demo/tkinter/matt/two-radio-groups.py
+++ b/Demo/tkinter/matt/two-radio-groups.py
@@ -75,9 +75,9 @@
 
 
 def printStuff():
-    print "party is", party.get()
-    print "flavor is", flavor.get()
-    print
+    print("party is", party.get())
+    print("flavor is", flavor.get())
+    print()
 
 #################################################
 #### Main starts here ...
diff --git a/Demo/tkinter/matt/window-creation-more.py b/Demo/tkinter/matt/window-creation-more.py
index eb0eb6f..3a4ce19 100644
--- a/Demo/tkinter/matt/window-creation-more.py
+++ b/Demo/tkinter/matt/window-creation-more.py
@@ -5,7 +5,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def makeWindow(self):
         fred = Toplevel()
diff --git a/Demo/tkinter/matt/window-creation-simple.py b/Demo/tkinter/matt/window-creation-simple.py
index c990ed9..fdf1dcc 100644
--- a/Demo/tkinter/matt/window-creation-simple.py
+++ b/Demo/tkinter/matt/window-creation-simple.py
@@ -4,7 +4,7 @@
 
 class Test(Frame):
     def printit(self):
-        print "hi"
+        print("hi")
 
     def makeWindow(self):
         fred = Toplevel()
diff --git a/Demo/tkinter/matt/window-creation-w-location.py b/Demo/tkinter/matt/window-creation-w-location.py
index 9f23bac..af6f876 100644
--- a/Demo/tkinter/matt/window-creation-w-location.py
+++ b/Demo/tkinter/matt/window-creation-w-location.py
@@ -9,9 +9,9 @@
 
 class QuitButton(Button):
     def __init__(self, master, *args, **kwargs):
-        if not kwargs.has_key("text"):
+        if "text" not in kwargs:
             kwargs["text"] = "QUIT"
-        if not kwargs.has_key("command"):
+        if "command" not in kwargs:
             kwargs["command"] = master.quit
         Button.__init__(self, master, *args, **kwargs)
 
