Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cacher, supprimer un widget dans un canva tkinter

    20 juillet 2023 à 4:12:36

    Bonjour,

    J'ai créer un canvas, dans lequel j'ai placé un widget de saisie, et deux boutons. Je voudrais pouvoir les supprimer ou les cacher à la fin d'une fonction. Mais ces 3 widgets sont positionnés avec la fonction place() et je ne peux donc pas utiliser pack_forget(). J'ai aussi essayé d'utiliser canva.itemconfig(widget,state = 'hidden') mais cela ne fonctionne pas non plus.

    Voici mon code:

            dessin=Canvas(FrameNumeration, bg="white", width=1220,
                       height=175, bd=0,
                       highlightthickness=0,
                       highlightbackground="sky blue")
            dessin.pack(side=TOP)
    
            line = dessin.create_line((110,90),(1110,90), width = 4)
            #linel,linel2 = [[] for i in range(0,11)],[[] for i in range(0,10)]
            labelline1  = Label(dessin, text=textlabel1, font = ( "New Roman" , 20 ), fg = 'black', bg = 'white')
            labelline1.place(x = X1,y = 45, anchor = 'center')
            labelline2  = Label(dessin, text=textlabel2, font = ( "New Roman" , 20 ), fg = 'black', bg = 'white')
            labelline2.place(x = X2,y = 45, anchor = 'center')
            labelline3  = Label(dessin, text=textlabel3, font = ( "New Roman" , 20 ), fg = 'black', bg = 'white')
            labelline3.place(x = X3,y = 45, anchor = 'center')
    
            linel,linel_c = [[] for i in range(0,101)],[[] for i in range(0,101)]
            for i in range(0,101):
                if i%10 == 0:
                    if niveau==5 and i%20 != 0:
                        linel[i] = dessin.create_line(((110+i*10),75),((110+i*10),95),width = 2,activefill = 'light green')
                        coord = dessin.coords(linel[i])
                        linel_c[i] = [coord[0],0]
                    else:
                        linel[i] = dessin.create_line(((110+i*10),80),((110+i*10),100),width = 3,activefill = 'light green')
                        coord = dessin.coords(linel[i])
                        linel_c[i] = [coord[0],0]
                else:    
                    linel[i] = dessin.create_line(((110+i*10),85),((110+i*10),95),width = 2,activefill = 'light green')
                    coord = dessin.coords(linel[i])
                    linel_c[i] = [coord[0],0] 
    
            linel_c.sort(key=lambda x: x[0])
            linel_c0 = [x[0] for x in linel_c]
    
            Va102 = IntVar()  
            def detec_clic(event):
                print('fonction')
                Va10 = IntVar()
                x , y = event.x, event.y
                rangex = np.arange(x-2,x+2)
                for k in range(0,len(rangex)):
                    if rangex[k] in linel_c0:
                        index = linel_c0.index(rangex[k])
                        saisie = Entry(dessin, width=5, bg='white', font = ( "New Roman" , 25 ))
                        saisie.place(x = rangex[k],y = 120,anchor = 'center')
                        redB = Button(dessin,width = 1,bg = 'red')
                        redB.place(x = rangex[k]-18,y = 155,anchor = 'center')
                        greenB = Button(dessin,width = 1, bg = 'green',  command = lambda: click(Va10))
                        greenB.place(x = rangex[k]+18, y = 155,anchor = 'center')
                        dessin.wait_variable(Va10)
                        linel_c[index][1] = saisie.get()
                        dessin.itemconfig(linel[index],fill = 'blue')
                        ###Je voudrais que saisie, redB et greenB soit supprimé ou masqué à ce niveau là. 
                Va102.set(1)
    
            dessin.bind("<Button-1>", detec_clic)
            FrameNumeration.wait_variable(Va102)
            Va102 = IntVar()
            dessin.bind("<Button-1>", detec_clic)
            FrameNumeration.wait_variable(Va102)
            Va102 = IntVar()
            dessin.bind("<Button-1>", detec_clic)
            FrameNumeration.wait_variable(Va102)

    Auriez -vous des idéés?

    Merci beaucoup!

    -
    Edité par HélèneRousseau1 20 juillet 2023 à 4:13:02

    • Partager sur Facebook
    • Partager sur Twitter
      20 juillet 2023 à 7:54:29

      Bonjour.

      Peut-être une piste par ici.

      • Partager sur Facebook
      • Partager sur Twitter

      PB68

        20 juillet 2023 à 8:20:22

        canvas.itemconfig(..., state='hidden') pourrait fonctionner si les widgets sont des items du canvas i.e. crées via canvas.create_window.

        S'ils sont positionnés sur la fenêtre définie par le Canvas via place, ce sera place_forget qui les cachera (et non pack_forget).

        • Partager sur Facebook
        • Partager sur Twitter
          20 juillet 2023 à 8:34:07

          Bonjour,

          place_forget() fonction parfaitement merci infiniment!

          • Partager sur Facebook
          • Partager sur Twitter
            20 juillet 2023 à 8:56:32

            HélèneRousseau1 a écrit:

            place_forget() fonction parfaitement merci infiniment!

            Bonjour,

            Sujet résolu

            Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)

            • Partager sur Facebook
            • Partager sur Twitter

            Cacher, supprimer un widget dans un canva tkinter

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown