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

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”

(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 
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
)
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