Porté variable avec tkinter et root.destroy
Bonjour,
Il ce passe quelque chose que je ne comprends pas.
Dans le code suivant les variables globale res et resultat change bien dans les fonctions mais pas en globale.
Je cherche à faire en sorte que lors d'un click sur non ou bien pas de réponse après x temps il y a une fermeture automatique de la msgbox puis fermeture du programme.
Il sera déployé sur poste windows avec un passage en exe avec auto-py-to-exe.
Code:
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 37 38 39 40 41 42 43 44 45 46 47
| import tkinter as tk
import subprocess
from tkinter import messagebox as msgb
import time
import sys
root = tk.Tk()
root.withdraw()
res = True
quitter = False
if len(sys.argv) == 3:
#en seconde
t1 = int(sys.argv[1]) * 60
#en milli seconde
t2 = int(sys.argv[2]) * 1000
elif len(sys.argv) == 2:
print("param 1 temps avant la fenêtre (en minutes), param 2 temps de la fenêtre (en secondes)")
quit()
else:
t1 = 5
t2 = 10000
def kill():
result = subprocess.call("kill.bat", shell=True)
quitter = True
def showMessage(message, timeout=t2):
try:
root.after(timeout, root.destroy)
res = msgb.askyesno('Info', message, master=root)
if(res == False):
kill()
except:
pass
while res:
time.sleep( t1 )
showMessage('Voulez-vous continuer à consulter ce titre ?')
print(res)
root = tk.Tk()
root.attributes('-topmost',True)
root.withdraw()
print(quitter)
if(quitter == True):
quit() |
Quand j'execute le script je passe bien dans kill, donc res passe bien à False, mais apres il repasse à True et donc ma boucle ne finie jamais.
Idem avec quitter.
Je suis sous win7 avec python 3.7.9.
A mon avis c'est la porté de la variable ou alors une recréation de la variable avec le withdraw mais je n'arrive pas à contourner.
J'ai essayé avec quit, exit à plusieurs endroit et cela ne change pas.
Si vous avez une idée je suis preneur, je ne suis pas attaché à tkinter toute autre gestionnaire de fenêtre me va aussi.
Bonne journée.