import tkinter
from random import randint


def randomRGBString():
    """
    :return: une chaîne de caractères représentant une couleur RGB aléatoire
    """
    return "#" + ("%06x" % randint(0, 16777215))


def petitRectangle(cv: tkinter.Canvas, nom: str = None):
    """
    Dessine un petit rectangle de taille 30x30 dans un `Canvas` de couleur aléatoire et portant
    potentiellement un `tag`.
    :param cv: le `Canvas` dans lequel dessiner le rectangle
    :param nom: le tag éventuel à associer au rectangle
    :return: un objet de type Tkinter.Rectangle positionné aléatoirement dans `cv`
    """
    x = 30 + randint(0, 270)
    y = 30 + randint(0, 270)
    return cv.create_rectangle(x, y, x + 30, y + 30, fill=randomRGBString(), tags=nom)


if __name__ == '__main__':
    # Création de la fenêtre principale
    root = tkinter.Tk()
    # Addition d'un titre de fenêtre
    root.title("Mon application")

    # Ajout d'un widget dans la fenêtre principale
    myCanvas = tkinter.Canvas(root, bg="white", height=300, width=300)
    myCanvas.pack()

    # Ajout d'un widget `Label` dans la fenêtre principale
    lbl = tkinter.Label(root, text="Rien")
    # Ajout d'un widget `Button` dans la fenêtre principale
    btn = tkinter.Button(root, text="Bouton à cliquer")

    lbl.pack()
    btn.pack()

    # Dessin de 2 rectangles aléatoires dans le `Canvas`
    rectangle1 = petitRectangle(myCanvas)
    rectangle2 = petitRectangle(myCanvas)

    # Noter qu'ici `.pack()` n'est pas nécessaire.
    # Il ne s'agit pas de widgets, mais de formes dessinées dans un widget donné.

    # Démarrage effectif de l'application (boucle de gestion des événements)
    root.mainloop()
