De base de la minuterie dans tkinter
J'ai écrit un code pour un python minuterie, mais quand je le lance j'ai une erreur mais le truc c'est que je ne sais pas quoi faire alors je suis venu ici pour obtenir de l'aide après que j'ai cherché partout sur internet pour de l'aide mais je n'ai rien trouvé qui correspondait à mon problème.
Voici l'Erreur:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files\Python33\lib\tkinter\__init__.py", line 1475, in __call__
return self.func(*args)
File "C:\Users\Public\Documents\Programming\Timer.py", line 27, in start
sec = sec + 1
UnboundLocalError: local variable 'sec' referenced before assignment
C'est mon code:
# Import Modules
from tkinter import *
import time
# Window Setup
root = Tk()
root.title('Timer')
root.state('zoomed')
# Timer Variables
global sec
time_sec = StringVar()
sec = 0
# Timer Start
def start():
while 1:
time.sleep(1)
sec = sec + 1
time_sec.set(sec)
start()
# Timer Setup
Label(root,
textvariable=time_sec,
fg='green').pack()
Button(root,
fg='blue',
text='Start',
command=start).pack()
# Program Loop
root.mainloop()
Quelqu'un pourrait-il m'aider?
Merci D'Avance!
Vous devez vous connecter pour publier un commentaire.
Vous devez déclarer
sec
à l'échelle mondiale à l'intérieur destart
. Voici comment réparer l'erreur:Cependant, cela a encore des problèmes, car il gèle l'écran en raison de la
while
boucle. Une meilleure façon de construire un timer avec tkinter est comme ceci:Aussi, quelques conseils pour l'avenir: ne jamais utiliser de
time.sleep
ou unwhile
boucle comme ça dans une interface graphique. Profitez de l'interface graphique du mainloop à la place. Il permettra d'économiser beaucoup de maux de tête, des trucs de congélation ou de s'écraser. Espérons que cette aide!after
méthode, comme il se doit d'être plus efficaces et plus précises; cependant, vous pouvez utiliser les événements pour éviter le gel et de s'écraser, tout en conservant unewhile
boucle, à l'aide desleep
. J'ai effectivement fait une minuterie, mais je ne savais pas à propos de laafter
méthode, puis. J'espère que la conversion sera de permettre à des intervalles plus petits.Vous devez lancer
global sec
au départ.c'est à dire:vous pouvez mettre à l'intérieur dans un
class
. de sorte que vous n'avez pas à vous soucier de la portée des variables..