Boucle for pour changer un label avec textvariable
xunil2003
Messages postés
766
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
3 réponses
-
Bonjour,
Il est défini ou ton label ?
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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.