HOME/Articles/

paint (1)

Article Outline

Example Python program paint (1).py For Python version 2.x. To test your Python version use:

python --version

Modules

  • from Tkinter import *

Methods

  • def main():
  • def buttonPressed(which):
  • def b1down(event):
  • def b1up(event):
  • def motion(event):

Code

Python tkinter example

""""Paint program by Dave Michell.

Subject: tkinter "paint" example
From: Dave Mitchell <[email protected]>
To: [email protected]
Date: Fri, 23 Jan 1998 12:18:05 -0500 (EST)

  Not too long ago (last week maybe?) someone posted a request
for an example of a paint program using Tkinter. Try as I might
I can't seem to find it in the archive, so i'll just post mine
here and hope that the person who requested it sees this!

  All this does is put up a canvas and draw a smooth black line
whenever you have the mouse button down, but hopefully it will
be enough to start with.. It would be easy enough to add some
options like other shapes or colors...

                                                yours,
                                                dave mitchell
                                                [email protected]
"""

from Tkinter import *

"""paint.py: not exactly a paint program.. just a smooth line drawing demo."""

b1 = "up"
xold, yold = None, None
color = 'black'

def main():
    root = Tk()

    def buttonPressed(which):
        if which == 'list':
            global color
            print 'List selected ', listbox.get(listbox.curselection())
            color = listbox.get(listbox.curselection())

    # canvas creation
    drawing_area = Canvas(root)
    drawing_area.pack()

    # binding
    drawing_area.bind("<Motion>", motion)
    drawing_area.bind("<ButtonPress-1>", b1down)
    drawing_area.bind("<ButtonRelease-1>", b1up)

    # list box creation
    listbox = Listbox(root)
    for item in ['red', 'green', 'blue', 'yellow', 'black']:
        listbox.insert(END, item)
    listbox.pack()

    Button(root, text="List Select", command = lambda: buttonPressed('list')).pack()

    # label, entry, checkbutton,
    # label : show your text and image
    # var = IntVar()
    # textvar = StringVar()
    # widgets = [
    #     Label(root, text="Input Anything:"),
    #     Entry(root, textvariable=textvar),
    #     Button(root, text='Button1', command = lambda: buttonPressed('1'))]

    # for wdg in widgets:
    #    wdg.pack()

    # textvar.set("Type Here!")

    root.mainloop()

def b1down(event):
    global b1
    b1 = "down"           # you only want to draw when the button is down
                          # because "Motion" events happen -all the time-

def b1up(event):
    global b1, xold, yold
    b1 = "up"
    xold = None           # reset the line when you let go of the button
    yold = None

def motion(event):
    if b1 == "down":
        global xold, yold, color
        if xold is not None and yold is not None:
            event.widget.create_line(xold,yold,event.x,event.y,fill=color,smooth=TRUE)
                          # here's where you draw it. smooth. neat.
        xold = event.x
        yold = event.y

if __name__ == "__main__":
    main()