]> granicus.if.org Git - python/commitdiff
#3018: tkinter demo fixes for py3k.
authorGeorg Brandl <georg@python.org>
Mon, 25 Oct 2010 17:50:20 +0000 (17:50 +0000)
committerGeorg Brandl <georg@python.org>
Mon, 25 Oct 2010 17:50:20 +0000 (17:50 +0000)
18 files changed:
Demo/tkinter/guido/AttrDialog.py
Demo/tkinter/guido/MimeViewer.py
Demo/tkinter/guido/ShellWindow.py
Demo/tkinter/guido/canvasevents.py
Demo/tkinter/guido/dialog.py
Demo/tkinter/guido/electrons.py
Demo/tkinter/guido/hanoi.py
Demo/tkinter/guido/listtree.py
Demo/tkinter/guido/mbox.py
Demo/tkinter/guido/rmt.py
Demo/tkinter/guido/solitaire.py
Demo/tkinter/guido/sortvisu.py
Demo/tkinter/guido/svkill.py
Demo/tkinter/guido/tkman.py
Demo/tkinter/matt/bind-w-mult-calls-p-type.py
Demo/tkinter/matt/entry-with-shared-variable.py
Demo/tkinter/matt/pong-demo-1.py
Demo/tkinter/matt/printing-coords-of-items.py

index 44d97664f7cf4fffbd0b194b772972c1a9233d7f..7acd34123ac760c393a699bf7f1b0e900a0f295d 100644 (file)
@@ -120,7 +120,7 @@ class Dialog:
                 cl = self.classes[c]
             except KeyError:
                 cl = 'unknown'
-            if type(cl) == tuple:
+            if type(cl) is tuple:
                 cl = self.enumoption
             elif cl == 'boolean':
                 cl = self.booleanoption
@@ -435,12 +435,11 @@ def remotetest(root, app):
     list.app = app                  # Pass it on to handler
 
 def opendialogs(e):
-    import string
     list = e.widget
     sel = list.curselection()
     for i in sel:
         item = list.get(i)
-        widget = string.split(item)[0]
+        widget = item.split()[0]
         RemoteWidgetDialog(list, list.app, widget)
         if widget == '.': continue
         try:
index b957c859653830a5030d6e5fcc21263660d548f1..babed8f5d0e5be4b2e56e9f19bfb0935fe68b43a 100755 (executable)
@@ -3,11 +3,27 @@
 # View a single MIME multipart message.
 # Display each part as a box.
 
-import string
-from types import *
+import os
+import sys
+import getopt
+import mailbox
 from tkinter import *
 from tkinter.scrolledtext import ScrolledText
 
+MBOXPATH = os.environ['HOME'] + '/Mail'
+
+class Error(Exception):
+    pass
+
+def getcurrent(self):
+    """Return the current message.  Raise Error when there is none."""
+    seqs = self.get_sequences()
+    try:
+        return max(seqs['cur'])
+    except (ValueError, KeyError):
+        raise Error("no cur message")
+
+
 class MimeViewer:
     def __init__(self, parent, title, msg):
         self.title = title
@@ -18,8 +34,10 @@ class MimeViewer:
                              {'text': title,
                               'command': self.toggle})
         self.button.pack({'anchor': 'w'})
-        headertext = msg.getheadertext(
-                lambda x: x != 'received' and x[:5] != 'x400-')
+        headertext = []
+        for item in msg.items():
+            headertext.append("%s: %s" % item)
+        headertext = '\n'.join(headertext)
         height = countlines(headertext, 4)
         if height:
             self.htext = ScrolledText(self.frame,
@@ -38,8 +56,8 @@ class MimeViewer:
                                   'ipady': 2,
                                   'fill': 'x',
                                   'after': self.button}
-        body = msg.getbody()
-        if type(body) == StringType:
+        body = msg.get_payload()
+        if type(body) == str:
             self.pad = None
             height = countlines(body, 10)
             if height:
@@ -102,16 +120,13 @@ def countlines(str, limit):
     i = 0
     n = 0
     while  n < limit:
-        i = string.find(str, '\n', i)
+        i = str.find('\n', i)
         if i < 0: break
         n = n+1
         i = i+1
     return n
 
 def main():
-    import sys
-    import getopt
-    import mhlib
     opts, args = getopt.getopt(sys.argv[1:], '')
     for o, a in opts:
         pass
@@ -121,13 +136,13 @@ def main():
         if arg[:1] == '+':
             folder = arg[1:]
         else:
-            message = string.atoi(arg)
+            message = int(arg)
 
-    mh = mhlib.MH()
-    f = mh.openfolder(folder)
-    if not message:
-        message = f.getcurrent()
-    m = f.openmessage(message)
+    mh = mailbox.MH(MBOXPATH)
+    f = mh.get_folder(folder)
+    if message is None:
+        message = getcurrent(f)
+    m = mailbox.MHMessage(f.get(message))
 
     root = Tk()
     tk = root.tk
@@ -140,4 +155,5 @@ def main():
 
     tk.mainloop()
 
-if __name__ == '__main__': main()
+if __name__ == '__main__':
+    main()
index fffcbc5b9797531eee0d6bbb2d0c739a704ce1fc..c5a04019009a398b25c5e4672039146857968edd 100644 (file)
@@ -1,6 +1,5 @@
 import os
 import sys
-import string
 from tkinter import *
 from tkinter.scrolledtext import ScrolledText
 from tkinter.dialog import Dialog
@@ -17,7 +16,7 @@ class ShellWindow(ScrolledText):
             except KeyError:
                 shell = '/bin/sh'
             shell = shell + ' -i'
-        args = string.split(shell)
+        args = shell.split()
         shell = args[0]
 
         ScrolledText.__init__(self, master, **cnf)
@@ -33,7 +32,7 @@ class ShellWindow(ScrolledText):
                                   self.outputhandler)
 
     def outputhandler(self, file, mask):
-        data = os.read(file, BUFSIZE)
+        data = os.read(file, BUFSIZE).decode()
         if not data:
             self.tk.deletefilehandler(file)
             pid, sts = os.waitpid(self.pid, 0)
@@ -65,7 +64,7 @@ class ShellWindow(ScrolledText):
         self.insert(END, "\n")
         line = self.get(self.pos, "end - 1 char")
         self.pos = self.index(END)
-        os.write(self.tochild, line)
+        os.write(self.tochild, line.encode())
         return "break"
 
     def sendeof(self, *args):
@@ -132,7 +131,7 @@ def spawn(prog, args):
     return pid, c2pread, p2cwrite
 
 def test():
-    shell = string.join(sys.argv[1:])
+    shell = ' '.join(sys.argv[1: ])
     root = Tk()
     root.minsize(1, 1)
     if shell:
index e5d27cc06d50bdf65ab949f27acb0e4f539f642f..16312b5becc9f1bb112a99decc53becc8b1cf187 100644 (file)
@@ -1,15 +1,41 @@
 #! /usr/bin/env python3
 
 from tkinter import *
-from Canvas import Oval, Group, CanvasText
 
 
-# Fix a bug in Canvas.Group as distributed in Python 1.4.  The
-# distributed bind() method is broken.  This is what should be used:
+# Since Canvas.Group is no longer present, the following class reproduces
+# a subset of the old Group class that is used by this app.
+
+class Group:
+    def __init__(self, canvas, tag=None):
+        if tag is None:
+            tag = 'Group%d' % id(self)
+
+        self.tag = self.id = tag
+        self.canvas = canvas
+        self.canvas.dtag(self.tag)
+
+    def __str__(self):
+        return self.tag
+
+    def _do(self, cmd, *args):
+        return self.canvas.tk.call(self.canvas._w, cmd, self.tag, *args)
+
+    def addtag_withtag(self, tagOrId):
+        self._do('addtag', 'withtag', tagOrId)
+
+    def bind(self, sequence=None, command=None, add=None):
+        return self.canvas.tag_bind(self.id, sequence, command, add)
+
+    def move(self, x_amount, y_amount):
+        self._do('move', x_amount, y_amount)
+
+    def dtag(self, tagToDelete=None):
+        self._do('dtag', tagToDelete)
+
+    def tkraise(self, aboveThis=None):
+        self._do('raise', aboveThis)
 
-class Group(Group):
-    def bind(self, sequence=None, command=None):
-        return self.canvas.tag_bind(self.id, sequence, command)
 
 class Object:
 
@@ -29,7 +55,6 @@ class Object:
 
     All instance attributes are public since the derived class may
     need them.
-
     """
 
     def __init__(self, canvas, x=0, y=0, fill='red', text='object'):
@@ -44,12 +69,10 @@ class Object:
         return str(self.group)
 
     def createitems(self, fill, text):
-        self.__oval = Oval(self.canvas,
-                           self.x-20, self.y-10, self.x+20, self.y+10,
-                           fill=fill, width=3)
+        self.__oval = self.canvas.create_oval(self.x - 20, self.y - 10,
+            self.x + 20, self.y + 20, fill=fill, width=3)
         self.group.addtag_withtag(self.__oval)
-        self.__text = CanvasText(self.canvas,
-                           self.x, self.y, text=text)
+        self.__text = self.canvas.create_text(self.x, self.y, text=text)
         self.group.addtag_withtag(self.__text)
 
     def moveby(self, dx, dy):
@@ -75,18 +98,15 @@ class Object:
 
 
 class Bottom(Object):
-
     """An object to serve as the bottom of a pile."""
 
     def createitems(self, *args):
-        self.__oval = Oval(self.canvas,
-                           self.x-20, self.y-10, self.x+20, self.y+10,
-                           fill='gray', outline='')
+        self.__oval = self.canvas.create_oval(self.x - 20, self.y - 10,
+            self.x + 20, self.y + 10, fill='gray', outline='')
         self.group.addtag_withtag(self.__oval)
 
 
 class Pile:
-
     """A group of graphical objects."""
 
     def __init__(self, canvas, x, y, tag=None):
index f16029c4768e5bd9f58e6b846f80e017774c5561..eae9c7e7e96a980308145e6d3e833164f6b79813 100755 (executable)
@@ -24,8 +24,7 @@ def dialog(master, title, text, bitmap, default, *args):
 
     # 2. Fill the top part with the bitmap and message.
 
-    msg = Message(top, width='3i', text=text,
-                  font='-Adobe-Times-Medium-R-Normal-*-180-*')
+    msg = Message(top, width='3i', text=text)
     msg.pack(side=RIGHT, expand=1, fill=BOTH, padx='3m', pady='3m')
     if bitmap:
         bm = Label(top, bitmap=bitmap)
index 6079c0449c4912ff464a25811db2e4486398d04f..896e07931e9d47ea6024e9cff5eaf9d2c704d719 100755 (executable)
@@ -62,11 +62,11 @@ class Electrons:
 
 # Main program
 def main():
-    import sys, string
+    import sys
 
     # First argument is number of electrons, default 30
     if sys.argv[1:]:
-        n = string.atoi(sys.argv[1])
+        n = int(sys.argv[1])
     else:
         n = 30
 
index a29b1d7dab8e045f454937b1985cfd79d855d7f2..34a0bbadd33b5d2760796cd2dfc63e43e0e4d6d6 100644 (file)
@@ -125,11 +125,11 @@ class Tkhanoi:
 
 # Main program
 def main():
-    import sys, string
+    import sys
 
     # First argument is number of pegs, default 4
     if sys.argv[1:]:
-        n = string.atoi(sys.argv[1])
+        n = int(sys.argv[1])
     else:
         n = 4
 
index 625d20e622ccb0dd0f0f7e8eeaecdfdc8a00b3ff..8db5b60ddbe900fcad3a2bd4ae6d1e05c6b7e415 100644 (file)
@@ -1,7 +1,6 @@
 # List a remote app's widget tree (names and classes only)
 
 import sys
-import string
 
 from tkinter import *
 
@@ -13,8 +12,6 @@ def listtree(master, app):
 
 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))
     children = list.tk.splitlist(
             list.send(app, 'winfo', 'children', widget))
index 299999cffb2d548e384f129935ededc9f892bba9..ccd658149b4f06f61b504e22e7ff4615a9b2739e 100755 (executable)
@@ -3,17 +3,15 @@
 # Scan MH folder, display results in window
 
 import os
-import sys
 import re
+import sys
 import getopt
-import string
-import mhlib
-
+import mailbox
 from tkinter import *
 
 from dialog import dialog
 
-mailbox = os.environ['HOME'] + '/Mail'
+MBOXPATH = os.environ['HOME'] + '/Mail'
 
 def main():
     global root, tk, top, mid, bot
@@ -38,8 +36,8 @@ def main():
 
     # Initialize MH
 
-    mh = mhlib.MH()
-    mhf = mh.openfolder(folder)
+    mh = mailbox.MH(MBOXPATH)
+    mhf = mh.get_folder(folder)
 
     # Build widget hierarchy
 
@@ -171,7 +169,7 @@ def open_folder(e=None):
         return
     i = sel[0]
     folder = folderbox.get(i)
-    mhf = mh.openfolder(folder)
+    mhf = mh.get_folder(folder)
     rescan()
 
 def open_message(e=None):
@@ -189,9 +187,10 @@ def open_message(e=None):
     tk.call('update', 'idletasks')
     i = sel[0]
     line = scanbox.get(i)
-    if scanparser.match(line) >= 0:
-        num = string.atoi(scanparser.group(1))
-        m = mhf.openmessage(num)
+    m = scanparser.match(line)
+    if m:
+        num = int(m.group(1))
+        m = mhf.get_message(num)
         if viewer: viewer.destroy()
         from MimeViewer import MimeViewer
         viewer = MimeViewer(bot, '+%s/%d' % (folder, num), m)
@@ -212,9 +211,11 @@ def remove_message(e=None):
     todo = []
     for i in sel:
         line = scanbox.get(i)
-        if scanparser.match(line) >= 0:
-            todo.append(string.atoi(scanparser.group(1)))
-    mhf.removemessages(todo)
+        m = scanparser.match(line)
+        if m:
+            toremove = int(m.group(1))
+            todo.append(toremove)
+            mhf.remove(toremove)
     rescan()
     fixfocus(min(todo), itop)
 
@@ -240,12 +241,13 @@ def refile_message(e=None):
     todo = []
     for i in sel:
         line = scanbox.get(i)
-        if scanparser.match(line) >= 0:
-            todo.append(string.atoi(scanparser.group(1)))
+        m = scanparser.match(line)
+        if m:
+            todo.append(int(m.group(1)))
     if lastrefile != refileto or not tofolder:
         lastrefile = refileto
         tofolder = None
-        tofolder = mh.openfolder(lastrefile)
+        tofolder = mh.get_folder(lastrefile)
     mhf.refilemessages(todo, tofolder)
     rescan()
     fixfocus(min(todo), itop)
@@ -254,18 +256,18 @@ def fixfocus(near, itop):
     n = scanbox.size()
     for i in range(n):
         line = scanbox.get(repr(i))
-        if scanparser.match(line) >= 0:
-            num = string.atoi(scanparser.group(1))
+        m = scanparser.match(line)
+        if m:
+            num = int(m.group(1))
             if num >= near:
                 break
     else:
         i = 'end'
-    scanbox.select_from(i)
     scanbox.yview(itop)
 
 def setfolders():
     folderbox.delete(0, 'end')
-    for fn in mh.listallfolders():
+    for fn in mh.list_folders():
         folderbox.insert('end', fn)
 
 def rescan():
@@ -278,6 +280,7 @@ def rescan():
         scanbox.insert('end', line)
 
 def scanfolder(folder = 'inbox', sequence = 'all'):
-    return [line[:-1] for line in 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()
index a3f430ea74f27376e0beb2ccbdcba1b0cf8df11f..d11edb0508ee42ce2bd7c42c4bbea5742d640cbb 100755 (executable)
@@ -28,7 +28,7 @@ s = Scrollbar(f, relief=FLAT)
 s.pack(side=RIGHT, fill=Y)
 t = Text(f, relief=RAISED, borderwidth=2, yscrollcommand=s.set, setgrid=1)
 t.pack(side=LEFT, fill=BOTH, expand=1)
-t.tag_config('bold', font='-Adobe-Courier-Bold-R-Normal-*-120-*')
+t.tag_config('bold')
 s['command'] = t.yview
 
 root.title('Tk Remote Controller')
index 375bd031b71606433929edc7ba59b135e224dbc9..d0f5dee7471f2860d8b167c786f98866e4ea5eac 100755 (executable)
@@ -22,20 +22,10 @@ know!
 
 # Imports
 
-import math
 import random
 
 from tkinter import *
-from Canvas import Rectangle, CanvasText, Group, Window
-
-
-# Fix a bug in Canvas.Group as distributed in Python 1.4.  The
-# distributed bind() method is broken.  Rather than asking you to fix
-# the source, we fix it here by deriving a subclass:
-
-class Group(Group):
-    def bind(self, sequence=None, command=None):
-        return self.canvas.tag_bind(self.id, sequence, command)
+from canvasevents import Group
 
 
 # Constants determining the size and lay-out of cards and stacks.  We
@@ -165,20 +155,22 @@ class Card:
         self.face_shown = 0
 
         self.x = self.y = 0
+        self.canvas = canvas
         self.group = Group(canvas)
 
         text = "%s  %s" % (VALNAMES[value], suit)
-        self.__text = CanvasText(canvas, CARDWIDTH//2, 0,
-                               anchor=N, fill=self.color, text=text)
+        self.__text = canvas.create_text(CARDWIDTH // 2, 0, anchor=N,
+                                         fill=self.color, text=text)
         self.group.addtag_withtag(self.__text)
 
-        self.__rect = Rectangle(canvas, 0, 0, CARDWIDTH, CARDHEIGHT,
-                              outline='black', fill='white')
+        self.__rect = canvas.create_rectangle(0, 0, CARDWIDTH, CARDHEIGHT,
+                                              outline='black', fill='white')
         self.group.addtag_withtag(self.__rect)
 
-        self.__back = Rectangle(canvas, MARGIN, MARGIN,
-                              CARDWIDTH-MARGIN, CARDHEIGHT-MARGIN,
-                              outline='black', fill='blue')
+        self.__back = canvas.create_rectangle(MARGIN, MARGIN,
+                                              CARDWIDTH - MARGIN,
+                                              CARDHEIGHT - MARGIN,
+                                              outline='black', fill='blue')
         self.group.addtag_withtag(self.__back)
 
     def __repr__(self):
@@ -202,15 +194,15 @@ class Card:
     def showface(self):
         """Turn the card's face up."""
         self.tkraise()
-        self.__rect.tkraise()
-        self.__text.tkraise()
+        self.canvas.tag_raise(self.__rect)
+        self.canvas.tag_raise(self.__text)
         self.face_shown = 1
 
     def showback(self):
         """Turn the card's face down."""
         self.tkraise()
-        self.__rect.tkraise()
-        self.__back.tkraise()
+        self.canvas.tag_raise(self.__rect)
+        self.canvas.tag_raise(self.__back)
         self.face_shown = 0
 
 
@@ -400,10 +392,9 @@ class Deck(Stack):
     """
 
     def makebottom(self):
-        bottom = Rectangle(self.game.canvas,
-                           self.x, self.y,
-                           self.x+CARDWIDTH, self.y+CARDHEIGHT,
-                           outline='black', fill=BACKGROUND)
+        bottom = self.game.canvas.create_rectangle(self.x, self.y,
+            self.x + CARDWIDTH, self.y + CARDHEIGHT, outline='black',
+            fill=BACKGROUND)
         self.group.addtag_withtag(bottom)
 
     def fill(self):
@@ -435,7 +426,7 @@ class Deck(Stack):
 
 def randperm(n):
     """Function returning a random permutation of range(n)."""
-    r = range(n)
+    r = list(range(n))
     x = []
     while r:
         i = random.choice(r)
@@ -478,10 +469,8 @@ class OpenStack(Stack):
 class SuitStack(OpenStack):
 
     def makebottom(self):
-        bottom = Rectangle(self.game.canvas,
-                           self.x, self.y,
-                           self.x+CARDWIDTH, self.y+CARDHEIGHT,
-                           outline='black', fill='')
+        bottom = self.game.canvas.create_rectangle(self.x, self.y,
+            self.x + CARDWIDTH, self.y + CARDHEIGHT, outline='black', fill='')
 
     def userclickhandler(self):
         pass
@@ -540,8 +529,8 @@ class Solitaire:
                                  background=BACKGROUND,
                                  activebackground="green",
                                  command=self.deal)
-        Window(self.canvas, MARGIN, 3*YSPACING + 20,
-               window=self.dealbutton, anchor=SW)
+        self.canvas.create_window(MARGIN, 3 * YSPACING + 20,
+            window=self.dealbutton, anchor=SW)
 
         x = MARGIN
         y = MARGIN
index 1e4165db4dcb8a5a98903550205daad4ea745529..cbc911d41703641542fe112136778e3241e3f030 100644 (file)
@@ -20,7 +20,6 @@ stand-alone application.
 
 
 from tkinter import *
-from Canvas import Line, Rectangle
 import random
 
 
@@ -31,6 +30,9 @@ WIDTH = 6
 
 class Array:
 
+    class Cancelled(BaseException):
+        pass
+
     def __init__(self, master, data=None):
         self.master = master
         self.frame = Frame(self.master)
@@ -41,9 +43,9 @@ class Array:
         self.canvas.pack()
         self.report = Label(self.frame)
         self.report.pack()
-        self.left = Line(self.canvas, 0, 0, 0, 0)
-        self.right = Line(self.canvas, 0, 0, 0, 0)
-        self.pivot = Line(self.canvas, 0, 0, 0, 0)
+        self.left = self.canvas.create_line(0, 0, 0, 0)
+        self.right = self.canvas.create_line(0, 0, 0, 0)
+        self.pivot = self.canvas.create_line(0, 0, 0, 0)
         self.items = []
         self.size = self.maxvalue = 0
         if data:
@@ -82,8 +84,6 @@ class Array:
         if self.in_mainloop:
             self.master.quit()
 
-    Cancelled = "Array.Cancelled"       # Exception
-
     def wait(self, msecs):
         if self.speed == "fastest":
             msecs = 0
@@ -110,15 +110,15 @@ class Array:
         for i in range(self.size):
             item = self.items[i]
             if first <= i < last:
-                item.item.config(fill='red')
+                self.canvas.itemconfig(item, fill='red')
             else:
-                item.item.config(fill='orange')
+                self.canvas.itemconfig(item, fill='orange')
         self.hide_left_right_pivot()
 
     def hide_partition(self):
         for i in range(self.size):
             item = self.items[i]
-            item.item.config(fill='red')
+            self.canvas.itemconfig(item, fill='red')
         self.hide_left_right_pivot()
 
     def show_left(self, left):
@@ -127,7 +127,7 @@ class Array:
             return
         x1, y1, x2, y2 = self.items[left].position()
 ##      top, bot = HIRO
-        self.left.coords([(x1-2, 0), (x1-2, 9999)])
+        self.canvas.coords(self.left, (x1 - 2, 0, x1 - 2, 9999))
         self.master.update()
 
     def show_right(self, right):
@@ -135,7 +135,7 @@ class Array:
             self.hide_right()
             return
         x1, y1, x2, y2 = self.items[right].position()
-        self.right.coords(((x2+2, 0), (x2+2, 9999)))
+        self.canvas.coords(self.right, (x2 + 2, 0, x2 + 2, 9999))
         self.master.update()
 
     def hide_left_right_pivot(self):
@@ -144,17 +144,17 @@ class Array:
         self.hide_pivot()
 
     def hide_left(self):
-        self.left.coords(((0, 0), (0, 0)))
+        self.canvas.coords(self.left, (0, 0, 0, 0))
 
     def hide_right(self):
-        self.right.coords(((0, 0), (0, 0)))
+        self.canvas.coords(self.right, (0, 0, 0, 0))
 
     def show_pivot(self, pivot):
         x1, y1, x2, y2 = self.items[pivot].position()
-        self.pivot.coords(((0, y1-2), (9999, y1-2)))
+        self.canvas.coords(self.pivot, (0, y1 - 2, 9999, y1 - 2))
 
     def hide_pivot(self):
-        self.pivot.coords(((0, 0), (0, 0)))
+        self.canvas.coords(self.pivot, (0, 0, 0, 0))
 
     def swap(self, i, j):
         if i == j: return
@@ -199,12 +199,13 @@ class ArrayItem:
         self.array = array
         self.index = index
         self.value = value
+        self.canvas = array.canvas
         x1, y1, x2, y2 = self.position()
-        self.item = Rectangle(array.canvas, x1, y1, x2, y2,
-                              fill='red', outline='black', width=1)
-        self.item.bind('<Button-1>', self.mouse_down)
-        self.item.bind('<Button1-Motion>', self.mouse_move)
-        self.item.bind('<ButtonRelease-1>', self.mouse_up)
+        self.item = array.canvas.create_rectangle(x1, y1, x2, y2,
+            fill='red', outline='black', width=1)
+        array.canvas.tag_bind(self.item, '<Button-1>', self.mouse_down)
+        array.canvas.tag_bind(self.item, '<Button1-Motion>', self.mouse_move)
+        array.canvas.tag_bind(self.item, '<ButtonRelease-1>', self.mouse_up)
 
     def delete(self):
         item = self.item
@@ -235,7 +236,7 @@ class ArrayItem:
         self.array.items[here], self.array.items[i] = other, self
         self.index = i
         x1, y1, x2, y2 = self.position()
-        self.item.coords(((x1, y1), (x2, y2)))
+        self.canvas.coords(self.item, (x1, y1, x2, y2))
         other.setindex(here)
 
     def setindex(self, index):
@@ -249,7 +250,7 @@ class ArrayItem:
         trajectory = interpolate(oldpts, newpts, nsteps)
         self.item.tkraise()
         for pts in trajectory:
-            self.item.coords((pts[:2], pts[2:]))
+            self.canvas.coords(self.item, pts)
             self.array.wait(50)
 
     def swapwith(self, other):
@@ -262,61 +263,63 @@ class ArrayItem:
         self.index, other.index = other.index, self.index
         mynewpts = self.position()
         othernewpts = other.position()
-        myfill = self.item['fill']
-        otherfill = other.item['fill']
-        self.item.config(fill='green')
-        other.item.config(fill='yellow')
+        myfill = self.canvas.itemcget(self.item, 'fill')
+        otherfill = self.canvas.itemcget(other.item, 'fill')
+        self.canvas.itemconfig(self.item, fill='green')
+        self.canvas.itemconfig(other.item, fill='yellow')
         self.array.master.update()
         if self.array.speed == "single-step":
-            self.item.coords((mynewpts[:2], mynewpts[2:]))
-            other.item.coords((othernewpts[:2], othernewpts[2:]))
+            self.canvas.coords(self.item, mynewpts)
+            self.canvas.coords(other.item, othernewpts)
             self.array.master.update()
-            self.item.config(fill=myfill)
-            other.item.config(fill=otherfill)
+            self.canvas.itemconfig(self.item, fill=myfill)
+            self.canvas.itemconfig(other.item, fill=otherfill)
             self.array.wait(0)
             return
         mytrajectory = interpolate(myoldpts, mynewpts, nsteps)
         othertrajectory = interpolate(otheroldpts, othernewpts, nsteps)
         if self.value > other.value:
-            self.item.tkraise()
-            other.item.tkraise()
+            self.canvas.tag_raise(self.item)
+            self.canvas.tag_raise(other.item)
         else:
-            other.item.tkraise()
-            self.item.tkraise()
+            self.canvas.tag_raise(other.item)
+            self.canvas.tag_raise(self.item)
         try:
             for i in range(len(mytrajectory)):
                 mypts = mytrajectory[i]
                 otherpts = othertrajectory[i]
-                self.item.coords((mypts[:2], mypts[2:]))
-                other.item.coords((otherpts[:2], otherpts[2:]))
+                self.canvas.coords(self.item, mypts)
+                self.canvas.coords(other.item, otherpts)
                 self.array.wait(50)
         finally:
             mypts = mytrajectory[-1]
             otherpts = othertrajectory[-1]
-            self.item.coords((mypts[:2], mypts[2:]))
-            other.item.coords((otherpts[:2], otherpts[2:]))
-            self.item.config(fill=myfill)
-            other.item.config(fill=otherfill)
+            self.canvas.coords(self.item, mypts)
+            self.canvas.coords(other.item, otherpts)
+            self.canvas.itemconfig(self.item, fill=myfill)
+            self.canvas.itemconfig(other.item, fill=otherfill)
 
     def compareto(self, other):
-        myfill = self.item['fill']
-        otherfill = other.item['fill']
-        outcome = cmp(self.value, other.value)
-        if outcome < 0:
+        myfill = self.canvas.itemcget(self.item, 'fill')
+        otherfill = self.canvas.itemcget(other.item, 'fill')
+        if self.value < other.value:
             myflash = 'white'
             otherflash = 'black'
-        elif outcome > 0:
+            outcome = -1
+        elif self.value > other.value:
             myflash = 'black'
             otherflash = 'white'
+            outcome = 1
         else:
             myflash = otherflash = 'grey'
+            outcome = 0
         try:
-            self.item.config(fill=myflash)
-            other.item.config(fill=otherflash)
+            self.canvas.itemconfig(self.item, fill=myflash)
+            self.canvas.itemconfig(other.item, fill=otherflash)
             self.array.wait(500)
         finally:
-            self.item.config(fill=myfill)
-            other.item.config(fill=otherfill)
+            self.canvas.itemconfig(self.item, fill=myfill)
+            self.canvas.itemconfig(other.item, fill=otherfill)
         return outcome
 
     def position(self):
@@ -429,7 +432,7 @@ def quicksort(array):
                         j = j-1
                 continue
             array.message("Choosing pivot")
-            j, i, k = first, (first+last)//2, last-1
+            j, i, k = first, (first+last) // 2, last-1
             if array.compare(k, i) < 0:
                 array.swap(k, i)
             if array.compare(k, j) < 0:
@@ -519,7 +522,7 @@ class SortDemo:
 
         self.v_size = MyIntVar(self.master, self)
         self.v_size.set(size)
-        sizes = [1, 2, 3, 4] + range(5, 55, 5)
+        sizes = [1, 2, 3, 4] + list(range(5, 55, 5))
         if self.size not in sizes:
             sizes.append(self.size)
             sizes.sort()
index 4ed88add695d3db53f06783ad811e379da55ceea..5ed8f0f66ec141cf66b1a33fada140847e400829 100755 (executable)
@@ -7,8 +7,6 @@ from tkinter import *
 if TkVersion < 4.0:
     raise ImportError("This version of svkill requires Tk 4.0 or later")
 
-from string import splitfields
-from string import split
 import subprocess
 import os
 
@@ -40,14 +38,14 @@ class Kill(Frame):
             ]
     def kill(self, selected):
         c = self.format_list[self.format.get()][2]
-        pid = split(selected)[c]
+        pid = selected.split()[c]
         os.system('kill -9 ' + pid)
         self.do_update()
     def do_update(self):
         format = self.format_list[self.format.get()][1]
         view = self.view_list[self.view.get()][1]
         s = subprocess.getoutput('ps %s %s' % (view, format))
-        list = splitfields(s, '\n')
+        list = s.split('\n')
         self.header.set(list[0] + '          ')
         del list[0]
         self.frame.list.delete(0, AtEnd())
@@ -97,14 +95,12 @@ class Kill(Frame):
         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)
         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,
index 4fc04884fe5ec59a385ecec7cbcda67ebd5240e8..c50258e95f7542fd9cbbfb33d9076ba35b849815 100755 (executable)
@@ -2,11 +2,11 @@
 
 # Tk man page browser -- currently only shows the Tcl/Tk man pages
 
-import sys
 import os
-import string
 import re
+import sys
 from tkinter import *
+
 from ManPage import ManPage
 
 MANNDIRLIST = ['/depot/sundry/man/mann','/usr/local/man/mann']
@@ -221,9 +221,9 @@ class SelectionBox:
             print('Regex error:', msg)
             return
         here = self.text.index(AtInsert())
-        lineno = string.atoi(here[:string.find(here, '.')])
+        lineno = int(here[:here.find('.')])
         end = self.text.index(AtEnd())
-        endlineno = string.atoi(end[:string.find(end, '.')])
+        endlineno = int(end[:end.find('.')])
         wraplineno = lineno
         found = 0
         while 1:
@@ -237,9 +237,9 @@ class SelectionBox:
             line = self.text.get('%d.0 linestart' % lineno,
                                  '%d.0 lineend' % lineno)
             i = prog.search(line)
-            if i >= 0:
+            if i:
                 found = 1
-                n = max(1, len(prog.group(0)))
+                n = max(1, len(i.group(0)))
                 try:
                     self.text.tag_remove('sel',
                                          AtSelFirst(),
@@ -247,10 +247,10 @@ class SelectionBox:
                 except TclError:
                     pass
                 self.text.tag_add('sel',
-                                  '%d.%d' % (lineno, i),
-                                  '%d.%d' % (lineno, i+n))
+                                  '%d.%d' % (lineno, i.start()),
+                                  '%d.%d' % (lineno, i.start()+n))
                 self.text.mark_set(AtInsert(),
-                                   '%d.%d' % (lineno, i))
+                                   '%d.%d' % (lineno, i.start()))
                 self.text.yview_pickplace(AtInsert())
                 break
         if not found:
index af0ec81df98744376ce6b708976350a547e426b6..0da7c3786e9c92801f68f1da2fe3dcfd519515af 100644 (file)
@@ -1,5 +1,4 @@
 from tkinter import *
-import string
 
 # This program  shows how to use a simple type-in box
 
index 473a596dabd819970fe91ac07cdb9cf193de59df..7d93da764e03c08742cb1be13a0f53e4acc1f32d 100644 (file)
@@ -1,5 +1,4 @@
 from tkinter import *
-import string
 
 # This program  shows how to make a typein box shadow a program variable.
 
@@ -35,7 +34,7 @@ class App(Frame):
         # because it's being looked at by the entry widget, changing
         # the variable changes the entry widget display automatically.
         # the strange get/set operators are clunky, true...
-        str = string.upper(self.contents.get())
+        str = self.contents.get().upper()
         self.contents.set(str)
 
     def print_contents(self, event):
index 09f9f2e2eec56b9e47776b6033b3c8239ed25233..82a5dc07403c41519ec3ac8bfb4052b7004cd014 100644 (file)
@@ -1,7 +1,5 @@
 from tkinter import *
 
-import string
-
 
 class Pong(Frame):
     def createWidgets(self):
index 26a4649f731e982e618571aaf6dbd810d0a3c2e0..771a60d0fd947a6fbf0cd65e13322ced82ad698a 100644 (file)
@@ -35,7 +35,7 @@ class Test(Frame):
         # 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(list(self.draw.coords(CURRENT)))
 
     def mouseLeave(self, event):
         # the "current" tag is applied to the object the cursor is over.