Python 3 Tkinter Draw Circles,Rectangles and Lines Shapes GUI Desktop App Full Project For Beginners

Python 3 Tkinter Draw Circles,Rectangles and Lines Shapes GUI Desktop App Full Project For Beginners

 

Welcome folks today in this blog post we will be building a tkinter app in which we will be drawing circles,rectangles and lines shapes in gui desktop app. All the full source code of the application is shown below.

 

 

Get Started

 

 

In order to get started you need to make an app.py file and copy paste the following code

 

app.py

 

from tkinter import Tk, Canvas, BOTH
from math import sqrt


WIDTH = 400
HEIGHT = 400


class Shape:
    def __init__(self, canvas, x, y):
        self.canvas = canvas
        self.x = x
        self.y = y

    def draw(self):
        raise NotImplementedError('Shape cannot be drawn!')


class Circle(Shape):
    def __init__(self, canvas, x, y, radius):
        super(Circle, self).__init__(canvas, x, y)
        self.radius = radius

    def draw(self):
        left = self.x - self.radius * sqrt(2)
        right = self.x + self.radius * sqrt(2)
        top = self.y - self.radius * sqrt(2)
        bottom = self.y + self.radius * sqrt(2)
        self.canvas.create_oval(left, top, right, bottom)


class Rectangle(Shape):
    def __init__(self, canvas, x, y, right, bottom):
        super(Rectangle, self).__init__(canvas, x, y)
        self.right = right
        self.bottom = bottom

    def draw(self):
        left = 2 * self.x - self.right
        right = self.right
        top = 2 * self.y - self.bottom
        bottom = self.bottom
        self.canvas.create_rectangle(left, top, right, bottom)


class XSquareGraph(Shape):
    def __init__(self, canvas, x, y, left, right):
        super(XSquareGraph, self).__init__(canvas, x, y)
        self.left = left
        self.right = right

    def draw(self):
        def f(x):
            return x*x
        start_x = self.left
        for i in range(self.left, self.right):
            self.canvas.create_line(start_x + self.x, HEIGHT - (f(start_x) + self.y),
                                    i + self.x, HEIGHT - (f(i) + self.y))
            start_x = i


def draw_from_script(filename, canvas):
    with open(filename, 'r') as f:
        for line in f:
            # shape coord1 coord2 coord3 ...
            # line = circle 20 20 30
            # split: ['circle', '20', '20', '30']
            # конструкция вот такая:
            # shape, x, y, *params = ['circle', '20', '20', '30']
            # *params подхватит все остальные элементы массива
            # запишет 'circle' в shape, '20' в x, '20' в y, и ['30'] в params
            shape, x, y, *params = line.split()
            x = int(x)
            y = int(y)
            params = map(int, params)
            if shape == 'circle':
                c = Circle(canvas, x, y, *params)
                c.draw()
            elif shape == 'rect':
                # если params = [200, 200],
                # получится вызов Rectangle(canvas, x, y, 200, 200)
                r = Rectangle(canvas, x, y, *params)
                r.draw()
            elif shape == 'x2_graph':
                g = XSquareGraph(canvas, x, y, *params)
                g.draw()


def draw_custom(canvas):
    canvas.create_line(0, 0, 50, 50)


def main():
    root = Tk()
    root.title = 'BitCoin graph'
    root.geometry("{}x{}".format(WIDTH, HEIGHT))
    canvas = Canvas(root)
    canvas.pack(fill=BOTH, expand=1)

    try:
        draw_from_script('shapes.txt', canvas)
    except IOError:
        draw_custom(canvas)

    root.mainloop()

if __name__ == '__main__':
    main()

 

See also  Python Tkinter GUI Download Images From URL with Progressbar Full Project For Beginners

 

Now make a shapes.txt file and copy paste the following code

 

shapes.txt

 

circle 75 75 40
rect 100 100 180 180
circle 75 75 30
circle 75 75 20
rect 100 100 200 200
x2_graph 200 0 -20 20

 

See also  Python 3 WxPython Print Text and Images Preview Using Popup Print Dialog Class in GUI Desktop App Full Project For Beginners

 

Now if you execute the python script by typing the below command as shown below

 

python app.py

 

 

Leave a Reply