Aide pour tkinter

3.1415926535897932384626433832795028 -  
Bonjour,

j'essaye de programmer sur python à l'aide de tkinter quelque chose qui s'approche du logiciel géogébra (logiciel pour tracer des figures géométriques). Pour l'instant j'ai réussit à ouvrir une fenêtre tkinter et à faire en sorte qu'un point soit créé lorsque l'on clique dessus. Mais j'aimerais créer comme sur géogébra une barre horizontale en haut de ma fenêtre tkinter qui contiendrait des boutons qui, lorsqu'on clique dessus change le statut d'une variable et donc la fonction lorsque l'on clique sur la fenêtre tkinter. ex: on a appuyé sur un bouton "point" le clique appel la fonction tracePoint (sauf si on clique sur un autre bouton) et si on clique sur le bouton "droite" les deux cliques suivants génèrent une droite...etc

Configuration: Windows / Firefox 83.0

3 réponses

  1. """____________________________________________________________________"""
    
    """---------------------------Initialisation---------------------------"""
    """____________________________________________________________________"""
    import random
    import time
    from tkinter import *
    root = Tk()
    canvas = Canvas(root, width=1600, height=1200, background="white")
    canvas.pack(side=LEFT,padx=5,pady=5)
    
    
    
    
    
    
    """_____________________________________________________________________"""
    
    """---Fonctions exécutées sans interaction avec l'interface graphique---"""
    """_____________________________________________________________________"""
    # calculs intermédiaires qui se font juste via python vide pour l'instant
    
    
    
    
    
    
    
    
    
    """____________________________________________________________________"""
    
    """---Fonctions exécutées en interactions avec l'interface graphique---"""
    """____________________________________________________________________"""
    
    def coord(event):#récupère les coordonèes d'un click
        x=event.x
        y=event.y
        #print("Le clique est détecté à x="+ str(x) +" y="+str(y))
        return(x,y)
        
       
    
    def create_point(event):#créer un point avec un click
        canvas.focus_set()
        x=event.x
        y=event.y
        canvas.create_rectangle(x-2,y-2,x+2,y+2,fill='black')
        print("Point créé à x=",x,",y=",y)
        return
    
    def create_point2(x,y):#créé un point avec des coordonnées
        canvas.focus_set()
        canvas.create_rectangle(x-2,y-2,x+2,y+2,fill='black')
        print("Point créé à x=",x,",y=",y)
        return
    
    
    global coord_segment
    coord_segment=[]
    def create_segment(event):#créé un segment
        canvas.focus_set()
        x1,y1=coord(event)
        coord_segment.append([x1,y1])
        if len(coord_segment)>=2:
            canvas.create_line(coord_segment[0][0],coord_segment[0][1],coord_segment[1][0],coord_segment[1][1])
            create_point2(coord_segment[0][0],coord_segment[0][1])
            create_point2(coord_segment[1][0],coord_segment[1][1])
            coord_segment.pop()
            coord_segment.pop()
        return([])
    
    #Association clic/action
    canvas.bind("<Button-1>",create_point)  #clique gauche
    canvas.bind("<Button-3>",create_segment)#clique droit
    """
    <Button-1> click gauche
    <Button-2> click molette
    <Button-3> click droite
    """
    
    """____________________________________________________________________"""
    
    """------------------Lancement de la fenêtre tkinter-------------------"""
    """____________________________________________________________________"""
    
    #Lancement
    root.mainloop()
    
    
    
    1. Ici ce sont les fonction que j'ai pour l'instant, je créer un point avec un clique gauche et un segment avec deux cliques droits, mais j'aimerais gérer les différentes actions via des bouton poussoirs à actioner qui seraient en haut de la fenêtre (comme dans géogébra) ou via un menu déroulant.
  2. Super, c'est très bien

    As-tu une doc tkinter pour savoir comment créer des boutons ?

    Dans les paramètres du bouton, on peut donner le nom d'une fonction à exécuter

    Je te donne un exemple:
    def creer_ligne()
        ''' cette fonction créé une ligne'''
    
    button = Button(canvas, text="Créer une ligne", command=creer_ligne)
    button.pack(.....
    


    Sinon, une doc sympa:

    https://python.developpez.com/cours/apprendre-python3/

    il y a comment faire aussi des menus déroulants
    1. Merci je vais regarder ça