Python Forum
automatically generates a frame
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
automatically generates a frame
#1
hi everyone,

on this code which automatically generates a frame with encapsulated labels, I would like to generate a maximum of 4 frames. Until then, it works. The problem is that the variable i (number of frames) is not updated when one of the frames is deleted. The variable r is the one I have to retrieve to update the value i. I tried with return and callback without success.

try:
	from Tkinter import *
except:
	from tkinter import *
from tkinter import messagebox                              # Librairie des fenêtres d'alerte

def removeLabel(var):
    global frames
    global i
    z = -1
    for frame in frames:
        z = z + 1
        # Check the text variable of the label of this frame
        if frame.winfo_children()[4].var == var:                                                        # 4 est le nombre de labels à générer dans une frame
           # Supprime frame
           frame.destroy()
           # Mise à jour du nombre de frame
           frames = frames[:z] + frames[z+1:]
           z = -1

    # Mise à jour du nombre de frame
    r = 0
    for frame in frames:
        frame.winfo_children()[4].var.set(r)
        r = r + 1
    i = i - 1
    print("i", i)

def addNewLabel():
    global  frames, i
    global table
    var = IntVar()

    frame = Frame(root)
    i = i + 1

    if i <= 5:
        frame.grid(row=i, column=4)
        var.set(len(frames))
        l = Label(frame, text="test")
        l.grid(row=0, column=0)
        l = Label(frame, textvariable=var)
        l.grid(row=0, column=1)
        l = Label(frame, textvariable=var)
        l.grid(row=0, column=2)
        l = Label(frame, textvariable=var)
        l.grid(row=0, column=3)
        l = Label(frame, textvariable=var)
        l.grid(row=0, column=4)
        l.var = var

        b = Button(frame, text="Remove", command=lambda: removeLabel(var))
        b.grid(row=0, column=5)

        frames.append(frame)                                                # liste des frames générée

    print("var.get()  ", var.get(), "     i  ",i)
    # var.trace("w", lambda name, index, mode, i=i: removeLabel(i))
    # print("eeeee", i)


    if i > 5:                                                                               # Limite du nombre de 10 frames à générer
        messagebox.showinfo("Info","Seulement 10 huiles peuvent être sélectionées")
        c.configure(state=DISABLED)
        return "break"
    print("+i+",i)


if __name__ == '__main__':
   root = Tk()
   frames = []
   table = []
   ind = []
   ind1 = []
   i = 1

   c = Button(root, text="add label", command=addNewLabel)
   c.grid(column=0, row=0)
   root.mainloop()
thank you for your time
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Tkinter] Scrollbar, Frame and size of Frame Maksim 2 8,938 Sep-30-2019, 07:30 AM
Last Post: Maksim
  [Tkinter] create and insert a new frame on top of another frame atlass218 4 10,991 Apr-18-2019, 05:36 PM
Last Post: atlass218
  [Tkinter] Treeview automatically adjust it's size when pack inside frame Prince_Bhatia 1 27,602 Jul-25-2018, 03:24 AM
Last Post: Larz60+
  [Tkinter] Frame size only works if frame is empty(Solved) Tuck12173 7 6,367 Jan-29-2018, 10:44 PM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020