"not enough free memory for image buffer"
Florine
-
Florine -
Florine -
Bonsoir,
dans mon programme je rencontre un petit problème. Python m'affiche comme message d'erreur :
Je suppose que c'est que la mémoire image est atteinte. Or il me reste encore beaucoup d'image à afficher…
comment puis-je faire pour résoudre ce problème ? Faut-il supprimer les images au fur et à mesure ? si oui comment faire s'il-vous-plaît ?
voici un extrait de mon programme pour que ça puisse vous aider :
dans mon programme je rencontre un petit problème. Python m'affiche comme message d'erreur :
Traceback (most recent call last): File "C:\Users\flori\Documents\Scolaire\Terminale S\ISN\projet.png\Premiere page.py", line 253, in <module> photo6=PhotoImage(file="horlogesansfond.png").zoom(35).subsample(32) File "C:\Users\flori\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 3568, in zoom self.tk.call(destImage, 'copy', self.name, '-zoom',x,y) _tkinter.TclError: not enough free memory for image buffer >>>
Je suppose que c'est que la mémoire image est atteinte. Or il me reste encore beaucoup d'image à afficher…
comment puis-je faire pour résoudre ce problème ? Faut-il supprimer les images au fur et à mesure ? si oui comment faire s'il-vous-plaît ?
voici un extrait de mon programme pour que ça puisse vous aider :
from tkinter import* #importer la bibliothèque tkinter from tkinter.messagebox import* import pygame import webbrowser from time import gmtime,strftime pygame.init() #initialiser pygame main=Tk() #Ouvrir une fenêtre main.title("Infected World")#donner un nom à la fenêtre, ici le nom du jeu main.geometry("600x480") #dimension de la fenêtre main.iconbitmap("épidémie.ico") #Modification de l'icone de la fenêtre main.configure (bg="dark slate gray") #Intégrer une bande sonore dès l'ouverture de la fenêtre, qui tourne en boucle sons_n1=pygame.mixer.Sound("laboratoire.wav") sons_n1.set_volume(0.2) sons_n1.play(-1) #--------------------------------première fenêtre--------------------------------------------------------- #Création d'une fonction effacer, qui efface le bouton et l'image de la fenêtre def effacer(): canvas1.delete() page1.destroy() page2.pack() #Création d'une fonction "quitter", qui détruit la page principale def quitter(): main.destroy() #Création d'un Menu et d'un sous-menu,en cascade menu=Menu(main) sousmenu=Menu(menu, tearoff=0) menu.add_cascade(label="Menu",menu=sousmenu) sousmenu.add_command(label="Quitter",command=quitter) main.config(menu=menu) #Création d'une frame page1=Frame(main,width=600,height=480,bg="dark slate gray") page1.pack() #Création du titre Labeltitre=Label(page1,text="Infected World",font=("Stencil",55),fg="white",bg="dark slate gray") Labeltitre.pack(expand=YES) #Importation d'une photo photo=PhotoImage(file="porte.png").zoom(35).subsample(32) canvas1=Canvas(page1,width=600,height=450,bd=0,highlightthickness=0) canvas1.create_image(300,225,image=photo) canvas1.pack(expand=YES) #Création d'un premier bouton au centre de la page bouton1=Button(page1,text="Jouer",height = "2", width = "20",font=("Stencil",20),command=effacer) bouton1.pack(expand=YES) #----------------------------------deuxième fenêtre-------------------------------------------- #Création d'une deuxième frame page2=Frame(main,width=600,height=600,bg="dark slate gray") page2.forget() #Création d'une fonction lettre, qui efface le bouton et l'image de la fenêtre def Lettre(): canvas2.delete() page2.destroy() page3.pack() textelettre.deiconify() #fait réapparaitre la fenetre du texte #Création d'un label pour expliquer Labeltitre=Label(page2,text="Vous êtes entrés dans le laboratoire.\n Vous trouvez une lettre sur le bureau...",font=("Stencil",15),fg="white",bg="dark slate gray") Labeltitre.pack(expand=YES) #Importation d'une photo photo2=PhotoImage(file="fond labo.png").zoom(35).subsample(32) canvas2=Canvas(page2,width=600,height=450,bd=0,highlightthickness=0,bg="dark slate gray") canvas2.create_image(300,225,image=photo2) canvas2.pack(expand=YES) #Création d'un premier bouton au centre de la page bouton2=Button(page2,text="Lettre",height = "2", width = "20",font=("Stencil",20),command=Lettre) bouton2.pack(expand=YES)
Configuration: Windows / Edge 17.17134
A voir également:
- _tkinter.tclerror: not enough free memory for image buffer
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Windows memory cleaner - Télécharger - Optimisation
- Image iso - Guide
- Word 2013 free download - Télécharger - Traitement de texte
- Mode sécurisé free - Forum Freebox
1 réponse
Bonjour,
c'est au moment où vous faites un zoom de 35 sur l'image que ça prends énormément de place, surtout que en multipliant par 35 la taille de l'image, vous multipliez par 35^2 soit 1225 le nombre de pixel. Je ne sais pas quelle est la limite de taille mais ce n'est pas étonnant que ça dépasse rapidement cette limite.
Supprimer les images au fur et à mesure ne changera probablement rien, en revanche vous divisez ensuite la taille par 32 pour avoir un rapport final de 35/32.
Ce rapport est il réellement important ? Vous pourriez par exemple réduire ce rapport à 12/11 par exemple qui est assez proche, ou même avec des nombres encore plus petits.
Vous pouvez aussi redimentionner l'image à la main pour que le programme n'ai pas besoins de la redimentionner lui même.
Sinon vous pouvez chercher une autre manière de redimentionner directement avec un ratio non entier. Il me semble que PIL permet de faire ça.
c'est au moment où vous faites un zoom de 35 sur l'image que ça prends énormément de place, surtout que en multipliant par 35 la taille de l'image, vous multipliez par 35^2 soit 1225 le nombre de pixel. Je ne sais pas quelle est la limite de taille mais ce n'est pas étonnant que ça dépasse rapidement cette limite.
Supprimer les images au fur et à mesure ne changera probablement rien, en revanche vous divisez ensuite la taille par 32 pour avoir un rapport final de 35/32.
Ce rapport est il réellement important ? Vous pourriez par exemple réduire ce rapport à 12/11 par exemple qui est assez proche, ou même avec des nombres encore plus petits.
Vous pouvez aussi redimentionner l'image à la main pour que le programme n'ai pas besoins de la redimentionner lui même.
Sinon vous pouvez chercher une autre manière de redimentionner directement avec un ratio non entier. Il me semble que PIL permet de faire ça.
Florine
J'ai réduit le rapport à 9/8 et ça marche pour le moment, merci beaucoup et bonne soirée !