how to draw on any window from a widget in python how to draw on any window from a widget in python tkinter tkinter

how to draw on any window from a widget in python


Use python in-built library Tkinter.

from tkinter import *from tkinter.colorchooser import askcolorclass 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, Noneif __name__ == '__main__':    Paint()