Bonjour tout le monde,
Je voudrais faire clignoter un texte ou autre widget ou item sans passer par une boucle qui risque géner le déroulement du programme, je n'ai rien trouvé.. quelqu'un sait-il?
Bonjour tout le monde,
Je voudrais faire clignoter un texte ou autre widget ou item sans passer par une boucle qui risque géner le déroulement du programme, je n'ai rien trouvé.. quelqu'un sait-il?
Bonjour,
Je vois 2 façon de faire. Soit en utilisant un thread qui permet de faire une boucle sans bloquer ton appli, soit en utilisant la méthode after de tkinter qui permet d'appeler une méthode après un temps donné.
voici un exemple avec after:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 from Tkinter import * class App: def __init__(self, master): self.frame = Frame(master) self.frame.pack() self.text = Label(self.frame, text="Hello", fg="blue") self.text.pack(side=LEFT) self.textIsVisible = True self.clignoter() def clignoter(self): if self.textIsVisible: clr = self.frame.cget('bg') else: clr = "blue" self.text.config(fg=clr) self.textIsVisible = not self.textIsVisible self.frame.after(500, self.clignoter) root = Tk() app = App(root) root.mainloop()
Merci nyko77, ça marche, j'aurais bien voulu voir la solution thread malgré tout! je débute en Python et "thread" m'échappe encore un peu, je n'ai pas fait de prog depuis pas mal de temps, j'ai débuté avec dBase, puis FoxPro, et il n'y avait pas ces notions là, je pensais qu'on pouvait avoir un attribut pour faire clignoter comme on l'a pour la fonture ou pour la couleur, dans le genre: MonText(color = 'RGB', blink = true ou flash ou un truc comme ça...
Voici une solution avec un thread, mais ça me semble un peu lourd, juste pour faire clignoter un texte. Un thread permet d'exécuter une fonction parallèlement à ton programme sans le bloquer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 from Tkinter import * import threading, time class App: def __init__(self, master): self.frame = Frame(master) self.frame.pack() self.text = Label(self.frame, text="Hello", fg="blue") self.text.pack(side=LEFT) self.continuer = True thread = threading.Thread(target=self.threadClignoter) thread.start() self.frame.bind("<Destroy>", self.stopThread) def threadClignoter(self): textIsVisible = True while self.continuer: if textIsVisible: clr = self.frame.cget('bg') else: clr = "blue" self.text.config(fg=clr) textIsVisible = not textIsVisible time.sleep(0.5) def stopThread(self, e): self.continuer = False root = Tk() app = App(root) root.mainloop()
Une nouvelle fois merci pour ton aide nyko77, je vais essayer de digérer tout ça .. en plus maintenant, je n'arrive pas à mettre en route Pyserial (besoin de communiquer entre un PC et un PIC), mais je ne veux pas faire un HS ici, merci encore.
Partager