Boucle for pour changer un label avec textvariable
xunil2003
Messages postés
765
Date d'inscription
Statut
Membre
Dernière intervention
-
jugor -
jugor -
Bonjour,
Je voudrais savoir comment faire une boucle for pour changer le texte d'un label depuis une liste.
j'ai fait plein d'essai aucun ne fonctionne .
Pouvez vous m'aider ?
Merci d'avance pour vos avis et conseils.
#!/usr/bin/python3 # -*- coding:utf-8 -*- # python3 /home/laurent/Langages/python/3.4.3/videos2/changer-texte-d-un-label-03.py from tkinter import * import tkinter as tk import time liste_videos_pioche = ['xxxxxxxxxxx', 'gggggggggg', 'kkkkkkkkk', 'pppppppppp'] #, 'oooooooooooooooo', 'pppppppppppp', 'rrrrrrrrrrrr', 'sssssssssssss', 'mmmmmmmmmmmm', 'vvvvvvvvvvvvvvv'] nro1=0 def plus2(): global nro2 nro2+=1 if nro2==len(liste_videos_pioche): nro2=0 entree2['text']=liste_videos_pioche[nro2] print ("liste_videos_pioche[nro2] : ",liste_videos_pioche[nro2]) print ("nro2 : ",nro2) def test(): plus2() nb_liste = len(liste_videos_pioche) for i in range(0, nb_liste): print ("i : ",i) nro2=i plus2() time.sleep(2) root=Tk() plus2() root.mainloop()
Linux / Firefox 122.0
A voir également:
- Boucle for pour changer un label avec textvariable
- Changer dns - Guide
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Changer carte graphique - Guide
- Changer extension fichier - Guide
- Changer wifi chromecast - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
un exemple:
import tkinter liste_videos_pioche = ['xxxxxxxxxxx', 'gggggggggg', 'kkkkkkkkk', 'pppppppppp'] #, 'oooooooooooooooo', 'pppppppppppp', 'rrrrrrrrrrrr', 'sssssssssssss', 'mmmmmmmmmmmm', 'vvvvvvvvvvvvvvv'] def plus2(): global nro2,entree2 if nro2<len(liste_videos_pioche): entree2['text']=liste_videos_pioche[nro2] nro2+=1 entree2.after(2000, plus2) root=tkinter.Tk() entree2=tkinter.Label(root) entree2.pack() nro2=0 plus2() root.mainloop()
un autre exemple plus propre, sans global:
import tkinter liste_videos_pioche = ['xxxxxxxxxxx', 'gggggggggg', 'kkkkkkkkk', 'pppppppppp' , 'oooooooooooooooo', 'pppppppppppp', 'rrrrrrrrrrrr', 'sssssssssssss', 'mmmmmmmmmmmm', 'vvvvvvvvvvvvvvv'] def plus2(w): if w.nro2==len(liste_videos_pioche): w.nro2=0 w['text']=liste_videos_pioche[w.nro2] w.nro2+=1 w.after(1500, lambda:plus2(w)) root=tkinter.Tk() entree2=tkinter.Label(root) entree2.pack() entree2.nro2=0 plus2(entree2) root.mainloop()
Il est possible d'utiliser des sleep(), mais cela bloquerait tout ce que tu voudrais faire de plus dans tkinter:
import tkinter import time liste_videos_pioche = ['xxxxxxxxxxx', 'gggggggggg', 'kkkkkkkkk', 'pppppppppp' , 'oooooooooooooooo', 'pppppppppppp', 'rrrrrrrrrrrr', 'sssssssssssss', 'mmmmmmmmmmmm', 'vvvvvvvvvvvvvvv'] def plus3(w): while True: if w.nro2==len(liste_videos_pioche): w.nro2=0 w['text']=liste_videos_pioche[w.nro2] w.update() w.nro2+=1 time.sleep(2) root=tkinter.Tk() entree2=tkinter.Label(root) entree2.pack() entree2.nro2=0 entree2.after(100,lambda:plus3(entree2)) root.mainloop()
Ici, comme tu ne fais rien d'autre, cela peut fonctionner.
Bonjour, on peut réduire cela en :
import tkinter as tk def change_text(widget, list_values, delay): ms = int(delay * 1000) for i, text in enumerate(list_values): widget.after(ms * i, widget.config, {'text':list_values[i]}) liste_videos_pioche = ( 'xxxxxxxxxxx', 'gggggggggg', 'kkkkkkkkk', 'pppppppppp', 'oooooooooooooooo', 'pppppppppppp', 'rrrrrrrrrrrr', 'sssssssssssss', 'mmmmmmmmmmmm', 'vvvvvvvvvvvvvvv', ) root = tk.Tk() label = tk.Label(root, text='', width=4 + max(n for n in map(len, liste_videos_pioche))) label.grid() change_text(label, liste_videos_pioche, .5) root.mainloop()
La méthode after pouvant accepter des paramètres à passer à la fonction.