Esmail wrote:
... Tk seems a bit more complex .. but I really don't know much about
it and its interface with Python to make any sort of judgments as
to which option would be better.

This should look pretty easy:


    import Tkinter as tk

    class Mover(object):
        def __init__(self, canvas, tag_or_id):
            self.canvas = canvas
            self.ident = tag_or_id
            self.x = self.y = 0

        def start(self, event):
            self.x = event.x
            self.y = event.y

        def move(self, event):
            if event.x != self.x or event.y != self.y:
                dx = event.x - self.x
                dy = event.y - self.y
                self.x = event.x
                self.y = event.y
                self.canvas.move(self.ident, dx, dy)

    def setup(root=None):
        if root is None:
            root = tk.Tk()
        root.geometry('400x400+5+5')  # experiment: -- place and size
        canvas = tk.Canvas(root)
        canvas.pack(expand=1, fill=tk.BOTH)
        # ovals are x1, y1, x2, y2
        a = canvas.create_oval((50, 100, 70, 140), fill='red')
        b = canvas.create_oval((100, 200, 140, 290), fill='blue')
        c = canvas.create_oval((300, 300, 390, 330), fill='green')

        canvas.itemconfig(a, fill='#55AADD') # using internet colors
        canvas.move(a, 5, 5) # move a down right 5 pixels
        mover = [Mover(canvas, ident) for ident in (a, b, c)]
        canvas.bind("<B1-Motion>", mover[0].move)
        canvas.bind("<Button-1>", mover[0].start)
        canvas.bind("<B2-Motion>", mover[1].move)
        canvas.bind("<Button-2>", mover[1].start)
        canvas.bind("<B3-Motion>", mover[2].move)
        canvas.bind("<Button-3>", mover[2].start)
        return canvas, mover

    if __name__ == '__main__':
        c, m = setup()
        tk.mainloop()


If you want to experiment, use something like:
    python -m idlelib.idle -n
or
    $ python <wherever python is>/Lib/idlelib/idle.py -n
or
    C:\> C:\Python25\python C:\Python25\Lib\idlelib\idle.py -n

To get an idle window with the -n switch on (so you are using the idle
"in-process") to see the effects of each Tkinter operation as you go.
You can then run these operations in place, seeing results and effects.

--Scott David Daniels
scott.dani...@acm.org
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to