
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