J'ai créé une fonction qui stocke l'emplacement de la souris lorsque j'appuie sur la touche s, et j'ai créé une autre fonction qui imprime les emplacements que j'ai stockés, mais le problème est que lorsque j'exécute la deuxième fonction, cela me donne cette erreur: {{X0 }}. Mon code est ci-dessous.

import time
import tkinter as tk
import pyautogui as py
import keyboard
root = tk.Tk()
def func1():
    coords = []
    while True:  # making a loop
        if keyboard.is_pressed('s'):  # if key 'q' is pressed
            coords+=py.position()
            time.sleep(0.4)
        if keyboard.is_pressed('d'):
            break
def func2():
    print(coords)

B = tk.Button(root, text='hello world', width=20, command=func1)
B.grid(padx=5, pady=5)

C = tk.Button(root, text='hello', width=20, command=func2)
C.grid(padx=5, pady=5)

root.mainloop()
-1
Rino Vegas 4 juin 2020 à 17:16

4 réponses

Meilleure réponse

func2 n'a pas accès aux variables "locales" de func1.

func1 doit renvoyer les valeurs de coordonnées, puis les transmettre à func2 comme argument.

0
Paul H 4 juin 2020 à 14:18

Vous avez déclaré à l'intérieur d'une fonction, elle est donc inaccessible pour la fonction 2. Essayez le code ci-dessous:

import time
import tkinter as tk
import pyautogui as py
import keyboard

root = tk.Tk()

coords = []

def func1():
    while True:
        if keyboard.is_pressed('s'):
            coords+=py.position()
            time.sleep(0.4)
        if keyboard.is_pressed('d'):
            break
def func2():
    print(coords)

B = tk.Button(root, text='hello world', width=20, command=func1)
B.grid(padx=5, pady=5)

C = tk.Button(root, text='hello', width=20, command=func2)
C.grid(padx=5, pady=5)

root.mainloop()

Déclarez simplement les coordonnées en dehors de la fonction

0
wjandrea 4 juin 2020 à 14:24

coords est une variable locale de func1, et en tant que telle func2 n'est pas au courant de son existence. Vous pouvez ajouter return coords à la fin de func1 et commencer func2 par la ligne coords = func1(). Le fait est que vous devez d'abord définir une variable appelée coords dans func2.

Une autre option serait de faire de coords une variable globale en premier lieu. par exemple:

coords = []
def func1():
   ...

def func2():
   ...
0
Yaron Grushka 4 juin 2020 à 14:22

Vous devez définir coords = [] en dehors de la fonction func1() pour func2 pouvoir y accéder.

0
JorgeV18 4 juin 2020 à 14:21