Boucle for pour changer un label avec textvariable
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, 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.
-
Contributeur
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()-
Contributeur
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() -
Contributeur@yg_be
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,
Il est défini ou ton label ?