2016-05-05 27 views
1

Ich zeige einige Stimuli und dann auf Tastendruck über eine Tastendruck-Funktion, aber ich kann nicht scheinen, auf die Variablen in dieser Funktion z. Quit soll ausgelöst werden, wenn der Benutzer während der Schlüsselüberprüfung Q drückt, und wenn der Benutzer 'g' drückt, wird running zu '2', was die gesamte while-Schleife beenden soll. Ich habe versucht, globale Variablen zu verwenden, aber ich konnte es immer noch nicht zum Laufen bringen, mir ist auch bewusst, dass globale Variablen als riskant betrachtet werden.Zugriff auf Variablen innerhalb einer Funktion

def check_keys(): 
    allKeys = event.getKeys(keyList = ('g','h','escape')) 
    for thisKey in allKeys: 
     if thisKey == 'escape': 
      dataFile.close() 
      window.close() 
      core.quit() 
     elif thisKey == 'g': 
      keyTime=core.getTime() 
      thisResp = 1  
     elif thisKey == 'h': 
      keyTime=core.getTime() 
      thisResp = 0  

thisResp = 2 
running = 1 
while running == 1: 

    for frame in range(frames): 
     fix.draw() 
     upper_target.draw() 
     z= window.flip() 
     check_keys() 
     if thisResp == 1: 
      running = 2: 

print running 

Jede Hilfe wird geschätzt.

+2

Dies ist Ihr tatsächlicher Code? Das Einrücken ist in Python wichtig. –

+0

Nein, wenn das mein Code wäre, hätte ich Einrückungsfehler. Ich habe es aber jetzt bearbeitet. – Steve

Antwort

2

Da thisResp nicht vor der check_keys()-Methode definiert ist, wird die Methode den Wert thisRep nicht ändern. Um den Wert von thisResp zu ändern, würde ich es entweder als Argument an die check_keys() übergeben oder check_keys() entweder 1 oder 0 zurückgeben und dann den Wert thisResp auf what's return setzen. Ihr Code würde folgendermaßen aussehen, wenn Sie den zweiten Ansatz verwenden:

def check_keys(): 
    allKeys = event.getKeys(keyList = ('g','h','escape')) 
    for thisKey in allKeys: 
     if thisKey == 'escape': 
      dataFile.close() 
      window.close() 
      core.quit() 
     elif thisKey == 'g': 
      keyTime=core.getTime() 
      return 1  
     elif thisKey == 'h': 
      keyTime=core.getTime() 
      return 0 
     return 2 

thisResp = 2 
running = 1 
while running == 1: 

    for frame in range(frames): 
     fix.draw() 
     upper_target.draw() 
     z= window.flip() 
     thisResp = check_keys() 
     if thisResp == 1: 
      running = 2 
      break 

print running 
+0

Danke für den Vorschlag. Wenn eine Taste gedrückt wird und Änderungen an 2 vorgenommen werden, bricht die while-Schleife aus irgendeinem Grund nicht aus. Ist es möglich, 2 Schleifen auszubrechen? – Steve

+0

Wie viele 'Frames' gibt es? Wenn Sie am Ende jeder for-Schleife ein 'print (running)' hinzufügen, sehen Sie, dass sich der Wert geändert hat? –

+0

60 Frames (1 Sekunde). Ja, der Wert des Laufens ändert sich, aber es bricht nicht aus der Schleife aus. Ich habe sogar die Frames geändert, um 10 Sekunden zu machen, also wäre es offensichtlich, als ich aus der Schleife ausbrach, aber nichts passierte. Ich musste immer noch warten, bis alle Frames verstrichen sind. – Steve