J'ai essayé d'utiliser cxfreeze pour distribuer mon script Python mais cela ne fonctionne pas!
J'arrive à exécuter le fichier mais il plante systématiquement à cet étape de mon script:
def display_stimuli():
window = pygame.display.set_mode([0, 0], FULLSCREEN | HWSURFACE | DOUBLEBUF)
W, H = window.get_size()
#choisir la longueur de la série
length_parameter = random.choice(serie_length)
#choisir les chiffres qui constitueront la série
length_chosen = serie_length[:int(length_parameter)]
stimuli_serie = []
preview_stimulus = None
stimuli_unused = [0,1,2,3,4,5,6,7,8,9]
for l in length_chosen:
stimulus = random.choice(stimuli_values)
if stimulus in stimuli_unused:
stimuli_unused.remove(stimulus)
if stimulus not in stimuli_serie:
stimuli_serie.extend([stimulus])
preview_stimulus = stimulus
# présenter les stimuli numériques
window = pygame.display.set_mode([0, 0], FULLSCREEN | HWSURFACE | DOUBLEBUF)
W, H = window.get_size()
images = {}
sizes = {}
window.fill(background_color)
for s in stimuli_serie:
for e in pygame.event.get():
if e.type == KEYDOWN:
if e.key == K_ESCAPE:
raise Exception
font = pygame.font.Font(None, 400)
image = font.render(str(s), True, stimulus_color, background_color)
size = image.get_size()
window.blit(image, [W/2 - size[0]/2,
H/2 - size[1]/2])
pygame.display.flip()
pygame.time.wait(stimulus_duration)
parameters_stimuli = (length_parameter, stimuli_serie, stimuli_unused)
return parameters_stimuli
Le message d'erreur qui s'affiche sur ma console est la suivante:
Quelqu'un a déjà ce message d'erreur? Comment le résoudre?
J'ai créé une exception pour pouvoir quitter l'exécution du script en appuyant simplement sur Echap lorsque je le lançais sur mon ordinateur (où est installé Python).
Je viens de supprimer cette exception afin de voir si c'était çà qui posait problème... mais ça ne toujours pas pas et j'ai le même message d'erreur qui apparait (cf mon message précédent).
Voici la totalité de mon script qui te permettra peut-être de m'aider plus facilement:
#! /usr/bin/env python
# -*- encoding: utf-8 -*-
"""Tâche dérivée du paradigme de Sternberg"""
import pygame
from pygame.locals import *
import random
import sys
#stimuli: chiffres 0 à 9
#1 essai = 6 séries, au total 24 essais soit 144 séries
#série: affichage successif d'un nombre aléatoire (compris entre 1 et 6) de chiffres
#localisation identique pour chacun des chiffres
#durée d'affichage des chiffres: 1,2sec
#test: précédé d'un signal d'alarme, affichage 2sec après le dernier stimulus
#les réponses attendues pour le test doivent entre dans 50% des cas OUI et dans 50% des cas NON
# tâche n°1 : réponse Oui/Non sur présentation du chiffre
#feedback: réponse correcte/incorrecte immédiatement après le test
#fin de l'essai
#définition des constantes
referent_pathway = 'C:/Users/Claire et Charles/Documents/Informatique_et_statistiques/Python/Scripts/Taches_Treisman_Sternberg/'
background_color = (255, 255, 255)
instructions = 'Instructions_Sternberg.png'
premiere_serie = 'Premiere_serie.png'
serie_length = [1, 2, 3, 4, 5, 6]
stimuli_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
stimulus_color = (0,0,0)
stimulus_duration = 1200
SOA = 2000
test_instructions_color = (255,0,0)
test_stimulus_color = (0,0,0)
nouvelle_serie = 'Nouvelle_serie.png'
number_series = 3
number_trials = 1
# choisir les paramètres de la série et présenter les stimuli numériques
def display_stimuli():
window = pygame.display.set_mode([0, 0], FULLSCREEN | HWSURFACE | DOUBLEBUF)
W, H = window.get_size()
#choisir la longueur de la série
length_parameter = random.choice(serie_length)
#choisir les chiffres qui constitueront la série
length_chosen = serie_length[:int(length_parameter)]
stimuli_serie = []
preview_stimulus = None
stimuli_unused = [0,1,2,3,4,5,6,7,8,9]
for l in length_chosen:
stimulus = random.choice(stimuli_values)
if stimulus in stimuli_unused:
stimuli_unused.remove(stimulus)
if stimulus not in stimuli_serie:
stimuli_serie.extend([stimulus])
preview_stimulus = stimulus
# présenter les stimuli numériques
window = pygame.display.set_mode([0, 0], FULLSCREEN | HWSURFACE | DOUBLEBUF)
W, H = window.get_size()
images = {}
sizes = {}
window.fill(background_color)
for s in stimuli_serie:
font = pygame.font.Font(None, 400)
image = font.render(str(s), True, stimulus_color, background_color)
size = image.get_size()
window.blit(image, [W/2 - size[0]/2,
H/2 - size[1]/2])
pygame.display.flip()
pygame.time.wait(stimulus_duration)
parameters_stimuli = (length_parameter, stimuli_serie, stimuli_unused)
return parameters_stimuli
# afficher la fenêtre avec l'information "TEST"
def dysplay_warning_signal():
window = pygame.display.set_mode([0, 0], FULLSCREEN | HWSURFACE | DOUBLEBUF)
W, H = window.get_size()
window.fill(background_color)
font = pygame.font.Font(None, 200)
text_warning_signal = font.render("TEST", 1, (test_instructions_color), (background_color))
text_warning_signal_size = text_warning_signal.get_size()
window.blit(text_warning_signal, [W/2 - text_warning_signal_size[0]/2,
H/2 - text_warning_signal_size[1]/2])
pygame.display.flip()
pygame.time.wait(2000)
# enregistrer la réponse et le temps de réaction du sujet
def test_and_response():
window = pygame.display.set_mode([0, 0], FULLSCREEN | HWSURFACE | DOUBLEBUF)
W, H = window.get_size()
parameters_stimuli = display_stimuli()
length_parameter = parameters_stimuli[0]
stimuli_serie = parameters_stimuli[1]
stimuli_unused = parameters_stimuli[2]
dysplay_warning_signal()
variable2 = random.choice(series_b)
if variable2%2 == 0 :
stimuli_test = random.choice(stimuli_serie)
if variable2%2 == 1:
stimuli_test = random.choice(stimuli_unused)
series_b.remove(variable2)
#display stimuli_test and register response (resp, reaction_time)
pygame.event.get() # clear any previous events
reaction_time = None # target detection response time (or None if no response)
resp = None
time0 = pygame.time.get_ticks()
while resp == None:
time = pygame.time.get_ticks() - time0
window.fill(background_color)
#instructions
font = pygame.font.Font(None, 100)
text_instructions_test = font.render("Avez-vous vu ce chiffre?", 1, (test_instructions_color), (background_color))
text_instructions_test_size = text_instructions_test.get_size()
text_instructions_test_pos = text_instructions_test.get_rect()
window.blit(text_instructions_test , [W/2 - text_instructions_test_size[0]/2,
H/4 - text_instructions_test_size[1]/2])
#stimulus_test
font = pygame.font.Font(None, 400)
stimuli_test_image = font.render(str(stimuli_test), True, stimulus_color, background_color)
stimuli_test_image_size = stimuli_test_image.get_size()
window.blit(stimuli_test_image, [W/2 - stimuli_test_image_size[0]/2,
H/2 - stimuli_test_image_size[1]/2])
pygame.display.flip()
#resgister the response
for e in pygame.event.get():
if e.type == KEYDOWN:
if e.key == K_LEFT:
resp = -1
if reaction_time == None:
reaction_time = time
elif e.key == K_RIGHT:
resp = +1
if reaction_time == None:
reaction_time = time
stimuli_test_resp_rt = (stimuli_test, resp, reaction_time, parameters_stimuli[0], parameters_stimuli[1])
return stimuli_test_resp_rt
#alerter le sujet qu'une nouvelle série va s'afficher
def new_serie_signal():
nouvelle_serie_pathway = str(referent_pathway + nouvelle_serie)
nouvelle_serie_image = pygame.image.load(str(nouvelle_serie_pathway)).convert()
window.fill(background_color)
nouvelle_serie_image_position = nouvelle_serie_image.get_rect()
window_position = window.get_rect()
nouvelle_serie_image_position.center = window_position.center
window.blit(nouvelle_serie_image, nouvelle_serie_image_position)
pygame.display.flip()
pygame.time.wait (2000)
# afficher un feedback de la réponse du sujet au test
# regrouper les différentes données à enregistrer
def stimuli_test_feedback():
window = pygame.display.set_mode([0, 0], FULLSCREEN | HWSURFACE | DOUBLEBUF)
W, H = window.get_size()
stimuli_test_resp_rt = test_and_response()
stimuli_test = stimuli_test_resp_rt[0]
stimuli_serie = stimuli_test_resp_rt[4]
window.fill(background_color)
font = pygame.font.Font(None, 200)
if stimuli_test in stimuli_serie:
if stimuli_test_resp_rt[1] == 1:
resp_value = 'Bonne'
text = font.render("Bravo!", 1, (test_instructions_color), (background_color))
textpos = text.get_rect()
textpos.center = window.get_rect().center
window.blit(text, textpos)
else:
resp_value = 'Fausse'
text = font.render("C'est faux!", 1, (test_instructions_color), (background_color))
textpos = text.get_rect()
textpos.center = window.get_rect().center
window.blit(text, textpos)
else:
if stimuli_test_resp_rt[1] == 1:
resp_value = 'Fausse'
text = font.render("C'est faux!", 1, (test_instructions_color), (background_color))
textpos = text.get_rect()
textpos.center = window.get_rect().center
window.blit(text, textpos)
else:
resp_value = 'Bonne'
text = font.render("Bravo!", 1, (test_instructions_color), (background_color))
textpos = text.get_rect()
textpos.center = window.get_rect().center
window.blit(text, textpos)
pygame.display.flip()
pygame.time.wait(2000)
all_parameters = (stimuli_test_resp_rt[2], resp_value, stimuli_test_resp_rt[3])
return all_parameters
try:
last_name_subject = raw_input('Nom : ')
first_name_subject = raw_input('Prenom : ')
sex_subject = raw_input('Sexe (h/f): ')
age_subject = raw_input('Age (ans): ')
f = open(str(last_name_subject + '_') + first_name_subject + '_Sternberg.txt', 'w')
print >>f, 'NOM', 'PRENOM', 'SEXE', 'AGE', 'LONGUEUR_SERIE', 'RT (ms)', 'REPONSE'
pygame.init()
window = pygame.display.set_mode([0, 0], FULLSCREEN | HWSURFACE | DOUBLEBUF)
W, H = window.get_size()
#Print the instruction and wait for space to begin
start = False
while not start:
instructions_pathway = str(referent_pathway + instructions)
instructions_image = pygame.image.load(str(instructions_pathway)).convert()
window.fill((0, 0, 0))
instructions_image_position = instructions_image.get_rect()
window_position = window.get_rect()
instructions_image_position.center = window_position.center
window.blit(instructions_image, instructions_image_position)
pygame.display.flip()
for e in pygame.event.get():
if e.type == KEYDOWN:
if e.key == K_SPACE:
start = True
#alerter le sujet que la première série va s'afficher
window.fill(background_color)
premiere_serie_pathway = str(referent_pathway + premiere_serie)
premiere_serie_image = pygame.image.load(str(premiere_serie_pathway)).convert()
premiere_serie_image_position = premiere_serie_image.get_rect()
window_position = window.get_rect()
premiere_serie_image_position.center = window_position.center
window.blit(premiere_serie_image, premiere_serie_image_position)
pygame.display.flip()
pygame.time.wait (2000)
#réaliser la tâche en fonction du nombre d'essais et de séries choisis
for t in range (number_trials):
series_b = range (number_series)
series_b.remove(0)
series_b.extend([number_series])
for s in range (number_series):
all_parameters = stimuli_test_feedback()
# enregistrer les données dans un fichier
print >>f, last_name_subject, first_name_subject, sex_subject, age_subject, all_parameters[2], all_parameters[0], all_parameters[1]
if t == (number_trials - 1)and s == (number_series - 1):
break
else:
new_serie_signal()
finally:
f.close()
pygame.quit()
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique