
 Envoyé par 
wiztricks
					
				 
				Salut,
Pour compléter ce qu'à déjà dit fred1599, la fonction
	
	1 2 3 4 5 6 7 8 9 10
   | # Fonction pour démarrer l'auto-clicker
def start_clicking():
    global actif
    actif = True
    try:
        interval = float(interval_entry.get())
    except ValueError: # Si pas de valeur donner par l'utilisateur initialiser a 1 seconde
        interval = 1
    auto_click(interval)
    t.start() | 
 entre dans une boucle infinie avec l'appel à auto_click. Du coup, l'instruction suivante qui devrait lever une exception de type NameError n'est jamais exécutée.... la fenêtre est gelée (elle ne crashe pas).
Idée de code avec after qui fait un peu la même chose et qui vous montre 2/3 trucs:
	
	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
   | import tkinter as tk
import pyautogui
 
ident = None                    # after timer ident
 
def do_click(interval):
    global ident
    pyautogui.click()
    ident = root.after(interval, do_click, interval)
 
 
def clicking(start):
    global ident
 
    if start:
        try:
            interval = float(entry.get())
        except ValueError:
            interval = 1
        interval = int(interval*1000) # adjust for ms timer
        ident = root.after(interval, do_click, interval)
        button['text'] = 'Arrêter'
 
    else:
        root.after_cancel(ident)
        ident = None
        button['text'] = 'Démarrer'
 
root = tk.Tk()
root.title("Auto Clicker")
 
tk.Label(root, text="Intervalle (en secondes) :").pack()
entry = tk.Entry(root)
entry.pack()
 
button = tk.Button(root, text="Démarrer", command=lambda: clicking(not ident))
button.pack()
 
tk.mainloop() | 
 - W
 
			
		 
	 
 Merci de vote réponse,
J'ai compris pourquoi ma fenêtre gelai grâce a vous, et merci de votre proposition de code.
Néanmoins je n'ai pas tout compris du fonctionnement sur votre code :
	
	ident = root.after(interval, do_click, interval)
 Pourquoi y'a t'il 2 fois l'interval dans les arguments de cette fonction
	
	root.after(delay, callback_function, *args)
  j'ai trouver cette explication à ce sujet mais pas très claire non plus je trouve 
	
	button = tk.Button(root, text="Démarrer", command=lambda: clicking(not ident))
 de même dans cette partie je ne comprend pas l'utilisation du lambda 
(l'utilisation du "not ident" est très bien penser c'est rare que j'utilise not).
						
					
Partager