Problème numpy.reshpape dans un script sous tkinter (an integer is required)
Bonjour à tous
Voila pour faire simple disons que je veux creer un exe (sous tkinter afin d'eviter l'affreuse console ms dos) qui transforme une matrice ligne du type [0,1,2,3,4,5,6,7,8] en une matrice
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
pour cela j'utilise la billbiothèque numpy
le script est le suivant
voila les modules
Code:
1 2 3 4 5 6 7
| #!/usr/bin/python
# -*- coding: utf-8 -*-
from Tkinter import *
import PIL
import Image
import numpy |
et voila le coprs du script:
Code:
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| def matrixx(event): # on applique le numpy.reshape à l'aide des informations collectées ci dessous.
matrix= numpy.reshape(filtre,(hauteur,largeur))
def valider_filtre (event): # on récupere dans la variable "largeur" le nombre de colonne de la matrice.
global entree4, texte7, texte8, largeur
largeur = entree3.get()
texte5.destroy()
texte6.destroy()
entree3.destroy()
texte7=Label(fenetre, text='le filtre est maintenant près à être reconstruit.')
texte7.pack(side=TOP)
texte8=Label(fenetre, text='faut il reconstruire le filtre (y ou n)?')
texte8.pack(side=LEFT)
entree4=Entry(fenetre)
entree4.pack(side=RIGHT)
entree4.bind("<Return>", matrixx)
def valider_filtre2 (event): # on récupère dans la variable "hauteur" le nombre de lignes de la matrice qu'il faut construire.
global entree3, texte5, texte6, hauteur
hauteur = entree2.get()
texte3.destroy()
texte4.destroy()
entree2.destroy()
texte5=Label(fenetre, text='le filtre comporte ' + str(hauteur)+' lignes.')
texte5.pack(side=TOP)
texte6=Label(fenetre, text='combien comporte-t-il de colonnes?')
texte6.pack(side=LEFT)
entree3=Entry(fenetre)
entree3.pack(side=RIGHT)
entree3.bind("<Return>", valider_filtre)
def valider_filtre_ligne (event): # on récupère dans la variable "filtre" la matrice en ligne.
global entree2, texte3, texte4, filtre
filtre= entree1.get()
texte1.destroy()
texte2.destroy()
entree1.destroy()
texte3=Label(fenetre, text='le filtre '+ str(filtre) +' à été defini.')
texte3.pack(side=TOP)
texte4=Label(fenetre, text='Nous allons reconstruire le filtre,\n entrer le nombre de lignes que comporte ce filtre.')
texte4.pack(side=LEFT)
entree2=Entry(fenetre)
entree2.pack(side=RIGHT)
entree2.bind("<Return>",valider_filtre2)
# Programme principal
fenetre = Tk()
texte1 = Label(fenetre, text='application de filtre')
texte1.pack(side=TOP)
texte2 = Label(fenetre, text='Entrez votre filtre en ligne :')
texte2.pack(side=LEFT)
entree1 = Entry(fenetre)
entree1.pack(side=RIGHT)
entree1.bind("<Return>", valider_filtre_ligne)
fenetre.mainloop() |
le fichier setup est classique:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #python
from distutils.core import setup
import py2exe
import Tkinter
setup(name="TIPE 2007",
version="1.0",
description="traitement d'images numeriques",
author="Remy, MPSI 2",
windows = [
{
"script": "script.py",
"icon_resources": [(1, "Globe.ico")]
}
],) |
le problème est le suivant, l'execution se passe bien jusqu'à la dernière étape, c'est à dire que le programme collecte bien les iformations "filtre", "hauteur" et "largeur" mais une erreur se produit lors de l'execution de matrixx:
Code:
1 2
| def matrixx(event):
matrix= numpy.reshape(filtre,(hauteur,largeur)) |
le message est le suivant:
Code:
1 2 3 4 5 6 7
| Exception in Tkinter callback
Traceback (most recent call last):
File "Tkinter.pyc", line 1403, in __call__
File "erreur.py", line 11, in matrixx
File "numpy\core\fromnumeric.pyc", line 104, in reshape
File "numpy\core\fromnumeric.pyc", line 36, in _wrapit
TypeError: an integer is required |
quelqu'un peut m'aider??
d'avance merci :aie:.
Rémy