Skip to content

Instantly share code, notes, and snippets.

@kwitnacy
Forked from nikhilkumarsingh/paint.py
Created June 3, 2019 12:30
Show Gist options
  • Select an option

  • Save kwitnacy/d65ce605a5cf9cbea41a8d477e4cd2c5 to your computer and use it in GitHub Desktop.

Select an option

Save kwitnacy/d65ce605a5cf9cbea41a8d477e4cd2c5 to your computer and use it in GitHub Desktop.

Revisions

  1. @nikhilkumarsingh nikhilkumarsingh created this gist Nov 3, 2017.
    78 changes: 78 additions & 0 deletions paint.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,78 @@
    from tkinter import *
    from tkinter.colorchooser import askcolor


    class Paint(object):

    DEFAULT_PEN_SIZE = 5.0
    DEFAULT_COLOR = 'black'

    def __init__(self):
    self.root = Tk()

    self.pen_button = Button(self.root, text='pen', command=self.use_pen)
    self.pen_button.grid(row=0, column=0)

    self.brush_button = Button(self.root, text='brush', command=self.use_brush)
    self.brush_button.grid(row=0, column=1)

    self.color_button = Button(self.root, text='color', command=self.choose_color)
    self.color_button.grid(row=0, column=2)

    self.eraser_button = Button(self.root, text='eraser', command=self.use_eraser)
    self.eraser_button.grid(row=0, column=3)

    self.choose_size_button = Scale(self.root, from_=1, to=10, orient=HORIZONTAL)
    self.choose_size_button.grid(row=0, column=4)

    self.c = Canvas(self.root, bg='white', width=600, height=600)
    self.c.grid(row=1, columnspan=5)

    self.setup()
    self.root.mainloop()

    def setup(self):
    self.old_x = None
    self.old_y = None
    self.line_width = self.choose_size_button.get()
    self.color = self.DEFAULT_COLOR
    self.eraser_on = False
    self.active_button = self.pen_button
    self.c.bind('<B1-Motion>', self.paint)
    self.c.bind('<ButtonRelease-1>', self.reset)

    def use_pen(self):
    self.activate_button(self.pen_button)

    def use_brush(self):
    self.activate_button(self.brush_button)

    def choose_color(self):
    self.eraser_on = False
    self.color = askcolor(color=self.color)[1]

    def use_eraser(self):
    self.activate_button(self.eraser_button, eraser_mode=True)

    def activate_button(self, some_button, eraser_mode=False):
    self.active_button.config(relief=RAISED)
    some_button.config(relief=SUNKEN)
    self.active_button = some_button
    self.eraser_on = eraser_mode

    def paint(self, event):
    self.line_width = self.choose_size_button.get()
    paint_color = 'white' if self.eraser_on else self.color
    if self.old_x and self.old_y:
    self.c.create_line(self.old_x, self.old_y, event.x, event.y,
    width=self.line_width, fill=paint_color,
    capstyle=ROUND, smooth=TRUE, splinesteps=36)
    self.old_x = event.x
    self.old_y = event.y

    def reset(self, event):
    self.old_x, self.old_y = None, None


    if __name__ == '__main__':
    Paint()