Boucle for pour changer un label avec textvariable
xunil2003
Messages postés
830
Statut
Membre
-
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
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.