From 856023a098c60ba0d2bcfd01c5cd8ccff7db97b5 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 25 Oct 2010 17:50:20 +0000 Subject: [PATCH] #3018: tkinter demo fixes for py3k. --- Demo/tkinter/guido/AttrDialog.py | 5 +- Demo/tkinter/guido/MimeViewer.py | 50 ++++++--- Demo/tkinter/guido/ShellWindow.py | 9 +- Demo/tkinter/guido/canvasevents.py | 54 ++++++--- Demo/tkinter/guido/dialog.py | 3 +- Demo/tkinter/guido/electrons.py | 4 +- Demo/tkinter/guido/hanoi.py | 4 +- Demo/tkinter/guido/listtree.py | 3 - Demo/tkinter/guido/mbox.py | 47 ++++---- Demo/tkinter/guido/rmt.py | 2 +- Demo/tkinter/guido/solitaire.py | 55 ++++----- Demo/tkinter/guido/sortvisu.py | 105 +++++++++--------- Demo/tkinter/guido/svkill.py | 8 +- Demo/tkinter/guido/tkman.py | 18 +-- Demo/tkinter/matt/bind-w-mult-calls-p-type.py | 1 - .../matt/entry-with-shared-variable.py | 3 +- Demo/tkinter/matt/pong-demo-1.py | 2 - Demo/tkinter/matt/printing-coords-of-items.py | 2 +- 18 files changed, 196 insertions(+), 179 deletions(-) diff --git a/Demo/tkinter/guido/AttrDialog.py b/Demo/tkinter/guido/AttrDialog.py index 44d97664f7c..7acd34123ac 100644 --- a/Demo/tkinter/guido/AttrDialog.py +++ b/Demo/tkinter/guido/AttrDialog.py @@ -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: diff --git a/Demo/tkinter/guido/MimeViewer.py b/Demo/tkinter/guido/MimeViewer.py index b957c859653..babed8f5d0e 100755 --- a/Demo/tkinter/guido/MimeViewer.py +++ b/Demo/tkinter/guido/MimeViewer.py @@ -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() diff --git a/Demo/tkinter/guido/ShellWindow.py b/Demo/tkinter/guido/ShellWindow.py index fffcbc5b979..c5a04019009 100644 --- a/Demo/tkinter/guido/ShellWindow.py +++ b/Demo/tkinter/guido/ShellWindow.py @@ -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: diff --git a/Demo/tkinter/guido/canvasevents.py b/Demo/tkinter/guido/canvasevents.py index e5d27cc06d5..16312b5becc 100644 --- a/Demo/tkinter/guido/canvasevents.py +++ b/Demo/tkinter/guido/canvasevents.py @@ -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): diff --git a/Demo/tkinter/guido/dialog.py b/Demo/tkinter/guido/dialog.py index f16029c4768..eae9c7e7e96 100755 --- a/Demo/tkinter/guido/dialog.py +++ b/Demo/tkinter/guido/dialog.py @@ -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) diff --git a/Demo/tkinter/guido/electrons.py b/Demo/tkinter/guido/electrons.py index 6079c0449c4..896e07931e9 100755 --- a/Demo/tkinter/guido/electrons.py +++ b/Demo/tkinter/guido/electrons.py @@ -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 diff --git a/Demo/tkinter/guido/hanoi.py b/Demo/tkinter/guido/hanoi.py index a29b1d7dab8..34a0bbadd33 100644 --- a/Demo/tkinter/guido/hanoi.py +++ b/Demo/tkinter/guido/hanoi.py @@ -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 diff --git a/Demo/tkinter/guido/listtree.py b/Demo/tkinter/guido/listtree.py index 625d20e622c..8db5b60ddbe 100644 --- a/Demo/tkinter/guido/listtree.py +++ b/Demo/tkinter/guido/listtree.py @@ -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)) diff --git a/Demo/tkinter/guido/mbox.py b/Demo/tkinter/guido/mbox.py index 299999cffb2..ccd658149b4 100755 --- a/Demo/tkinter/guido/mbox.py +++ b/Demo/tkinter/guido/mbox.py @@ -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() diff --git a/Demo/tkinter/guido/rmt.py b/Demo/tkinter/guido/rmt.py index a3f430ea74f..d11edb0508e 100755 --- a/Demo/tkinter/guido/rmt.py +++ b/Demo/tkinter/guido/rmt.py @@ -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') diff --git a/Demo/tkinter/guido/solitaire.py b/Demo/tkinter/guido/solitaire.py index 375bd031b71..d0f5dee7471 100755 --- a/Demo/tkinter/guido/solitaire.py +++ b/Demo/tkinter/guido/solitaire.py @@ -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 diff --git a/Demo/tkinter/guido/sortvisu.py b/Demo/tkinter/guido/sortvisu.py index 1e4165db4dc..cbc911d4170 100644 --- a/Demo/tkinter/guido/sortvisu.py +++ b/Demo/tkinter/guido/sortvisu.py @@ -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('', self.mouse_down) - self.item.bind('', self.mouse_move) - self.item.bind('', 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, '', self.mouse_down) + array.canvas.tag_bind(self.item, '', self.mouse_move) + array.canvas.tag_bind(self.item, '', 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() diff --git a/Demo/tkinter/guido/svkill.py b/Demo/tkinter/guido/svkill.py index 4ed88add695..5ed8f0f66ec 100755 --- a/Demo/tkinter/guido/svkill.py +++ b/Demo/tkinter/guido/svkill.py @@ -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, diff --git a/Demo/tkinter/guido/tkman.py b/Demo/tkinter/guido/tkman.py index 4fc04884fe5..c50258e95f7 100755 --- a/Demo/tkinter/guido/tkman.py +++ b/Demo/tkinter/guido/tkman.py @@ -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: 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 af0ec81df98..0da7c3786e9 100644 --- a/Demo/tkinter/matt/bind-w-mult-calls-p-type.py +++ b/Demo/tkinter/matt/bind-w-mult-calls-p-type.py @@ -1,5 +1,4 @@ from tkinter import * -import string # This program shows how to use a simple type-in box diff --git a/Demo/tkinter/matt/entry-with-shared-variable.py b/Demo/tkinter/matt/entry-with-shared-variable.py index 473a596dabd..7d93da764e0 100644 --- a/Demo/tkinter/matt/entry-with-shared-variable.py +++ b/Demo/tkinter/matt/entry-with-shared-variable.py @@ -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): diff --git a/Demo/tkinter/matt/pong-demo-1.py b/Demo/tkinter/matt/pong-demo-1.py index 09f9f2e2eec..82a5dc07403 100644 --- a/Demo/tkinter/matt/pong-demo-1.py +++ b/Demo/tkinter/matt/pong-demo-1.py @@ -1,7 +1,5 @@ from tkinter import * -import string - class Pong(Frame): def createWidgets(self): diff --git a/Demo/tkinter/matt/printing-coords-of-items.py b/Demo/tkinter/matt/printing-coords-of-items.py index 26a4649f731..771a60d0fd9 100644 --- a/Demo/tkinter/matt/printing-coords-of-items.py +++ b/Demo/tkinter/matt/printing-coords-of-items.py @@ -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.