[Python] tkinter ajouter/supprimer des "entry" et "label"

Bonjour
Je suis débutant en python.
Je suis face à un problème avec tkinter
J’aimerai ajouter (ou supprimer) des “entry” et des “label” quand le programme et en cour d’exécution.
Voici ce que j’ai déjà : un programme avec 4 “entry” et 4 “label” qui affiche le résultat des pings quand on appui sur le bouton Go !

Voici ce que j’aimerai faire (montage) entrer le nombre de test a effectuer quand je click sur actualiser il me met le nombre de “entry” et “label” indiqué

pour l’instant c’est sous M$ (au travail) mais je prévois de la faire sous linux (je met la pression a mon supérieur pour passer a linux )
Je n’ai aucune idée de comment faire ?
Merci pour votre aide
:smt006

Il y a moyen de voir un bout de code ?
J’ai aucune notion en tkinter

don voici le code

[code]# -- coding:Utf-8 --

importation fonction

from Tkinter import *
import os
pingOk = " None"

fonction locale ping

def ping (ip):
testping = " Echec !"
tpa , tpb = 0 , 0
ping=os.popen("ping “+ ip + " -n 1”) #permet d’exécuter un programme console
resultping=ping.readlines() # renvoi dans la variable resultping

nbline = len(resultping) #donne le nombre de ligne dans la variable nbline
loopA  = 1 
while (loopA < nbline): #boucle de lecture ligne par ligne
	phrase = resultping[loopA]
	nbcar = len(phrase) #donne le nombre de caractère dans la variable nbcar
	loopB = 1
	while (loopB  < nbcar - 1): # boucle d’avance du curseur 
		mot = 	phrase[loopB]
		loopC = 1
		while (loopC < 10): #boucle d’extraction de (10) caractères 
			posi = loopB + loopC
			mot = mot + phrase[posi]
			loopC = loopC + 1
			if (posi == nbcar - 1): # empêche de sortir des limites avec un sortie de boucle
				loopC = 10
			if (mot == "perdus = 0"): #condition pour que le ping soit ok (10 caractères) 
				tpa = 1
			if (mot == "Impossible"): #condition pour que le ping soit ok (10 caractères) 
				tpb = 1
		loopB = loopB + 1
	loopA = loopA + 1
if (tpa == 1):
	testping = " Ok !"
if (tpb == 1):
	testping = " Echec !"
return testping # retourne la valeur de testping 

fin de fonction ping

fontion locale affichage resultat

def resul():
resultip = ping (ent1.get()) # met dans la variable resultping le retour de la fonction ping (entrée de entping)
lab1.configure(text= resultip) # reatribut le texte dans le label lab1
resultip = ping (ent2.get()) # met dans la variable resultping le retour de la fonction ping (entrée de entping)
lab2.configure(text= resultip) # reatribut le texte dans le label lab2
resultip = ping (ent3.get()) # met dans la variable resultping le retour de la fonction ping (entrée de entping)
lab3.configure(text= resultip) # reatribut le texte dans le label lab3
resultip = ping (ent4.get()) # met dans la variable resultping le retour de la fonction ping (entrée de entping)
lab4.configure(text= resultip) # reatribut le texte dans le label lab4
# fin fontion affichage resultat

tkinter

fen0 = Tk() # fenetre maitre
text1 = Label(fen0, text=“SuPeR PinG :”) # texte
lab1 = Label(fen0) # label
lab2 = Label(fen0)
lab3 = Label(fen0)
lab4 = Label(fen0)
ent1 = Entry(fen0) # entrée
ent2 = Entry(fen0)
ent3 = Entry(fen0)
ent4 = Entry(fen0)
boutgo = Button(fen0, text=“Go!”, command = resul) # boutton Go! execute la cmd result

mise en page fen0

text1.grid(row = 0)
ent1.grid(row = 1 , column = 0)
ent2.grid(row = 2 , column = 0)
ent3.grid(row = 3 , column = 0)
ent4.grid(row = 4 , column = 0)
lab1.grid(row = 1 , column = 1)
lab2.grid(row = 2 , column = 1)
lab3.grid(row = 3 , column = 1)
lab4.grid(row = 4 , column = 1)
boutgo.grid(row = 5 , column = 1)

fen0.mainloop # boucle fen0[/code]

bon je suis débutant mon code est un peut dégueulasse
pour la fonction “ping” faut que j’optimise pour la recherche de chaîne avec la fonction “re”

Tu dois avoir une fonction d’actualisation de la fenêtre.
Généralement le principe c’est de modifier la fenêtre puis de la rafraichir.

Regarde l’API autour de l’objet fenêtre.

bin mon problème c’est pas l’actualisation pour l’instant, j’avais pensé a faire des boucles pour incrémenter le nom du label et de l’entry
du genre

nombreDeTest = 3
loopLab = 1
while (loopLab  < nombreDeTest): 
    nomDuLab = "lab" + loopLab
    nomDeEntry = "ent" + loopLab
    nomDuLab.configure(text= resultip) 
    resultip = ping (nomDeEntry.get())
    loopLab = loopLab + 1

fen0 = Tk()
loopLab = 1
while (loopLab  < nombreDeTest): 
    nomDuLab = "lab" + loopLab
    nomDeEntry = "ent" + loopLab
    nomDuLab = Label(fen0)
    nomDeEntry = Entry(fen0)
    loopLab = loopLab + 1
boutgo = Button(fen0, text="Go!", command = resul) # boutton Go! execute la cmd result

loopLab = 1
while (loopLab  < nombreDeTest): 
    nomDuLab = "lab" + loopLab
    nomDeEntry = "ent" + loopLab
    nomDeEntry.grid(row = loopLab , column = 0)
    nomDuLab.grid(row = loopLab , column = 1)
    loopLab = loopLab + 1
boutgo.grid(row = 5 , column = 1)
fen0.mainloop

mais ca ne fonctionne pas on ne peut pas mettre de variable comme nom de label
visuellement ca fonctionne mais en fait le programme répète 4 fois le même label et entry

Et si au lieu de :

Tu fais:

Comme ça, la valeur contenue dans looplab va se concaténer avec “lab”
:question:
(J’ai pas lu tout le code, ce n’est peut-être pas ça que tu veux faire…)

oups
je viens de relire le code c’est plein de fautes (de débutant)
oui effectivement faut convertir en str la variable
en fait j’ai réécrit le code sans le testé et celui d’origine je ne l’ai plus :frowning:
le problème c’est que je ne pouvais pas mettre de variable comme nom de label/entry
une fois lancé (et corrigé bien sur :blush: )

nomDuLab.configure(text= resultip) AttributeError: 'str' object has no attribute 'configure'

Pour le code ci-dessus je vais laisser tel quel pour que la honte s’abatte sur moi a chaque fois que je le verrais