[Py2exe] Problème de compilation

Problème de compilation [Py2exe] - Python - Programmation

Marsh Posté le 16-12-2008 à 00:52:05    

Hello les devs python c'est encore moi  :D . (J'entend déja "Oh non, encore lui  :pfff: ).
 
Je vient vous poser mon problème: j'ai donc sorti avec Boa constrictor deux codes pyton (l'application et le programme). J'ai créé le code pour py2exe. Tout ce passe bien mais quand je veut lancer mon executable, il ne se passe rien (à part la création d'un fichier log:
 Traceback (most recent call last):
  File "Application.py", line 11, in <module>
NameError: name 'app' is not defined)
 
Je vous met ici les deux codes (des extraits, le second code n'étant pas terminé)
 
l'application

Code :
  1. #!/usr/bin/env python
  2. #Boa:PyApp:main
  3. modules ={'Frame1': [0, '', 'none://finale.py']}
  4. def main():
  5.     pass
  6. if __name__ == '__main__':
  7.     main()
  8.     app.MainLoop()


 
Le programme (final.py)

Code :
  1. import wx
  2. import wx.lib.stattext
  3. from wx.lib.anchors import LayoutAnchors
  4. quantity_var = 0
  5. precision_var = 0
  6. delay_var = 0
  7. cost_var = 0
  8. def create(parent):
  9.     return Frame1(parent)
  10. [wxID_FRAME1, wxID_FRAME1DELAY, wxID_FRAME1PRECISION, wxID_FRAME1QUANTITY,
  11. wxID_FRAME1RADIOBOX1, wxID_FRAME1STATICBITMAP1, wxID_FRAME1STATICBOX1,
  12. wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3,
  13. wxID_FRAME1VALIDATION,
  14. ] = [wx.NewId() for _init_ctrls in range(11)]
  15. [wxID_FRAME1MENU2PROPOS] = [wx.NewId() for _init_coll_Informations_Items in range(1)]
  16. class Frame1(wx.Frame):
  17.     def _init_ctrls(self, prnt):
  18.         # generated method, don't edit
  19.         wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
  20.               pos=wx.Point(482, 197), size=wx.Size(535, 431),
  21.               style=wx.DEFAULT_FRAME_STYLE, title='DjiDji 2.0')
  22.         self.SetClientSize(wx.Size(519, 395))
  23.         self.SetAutoLayout(True)
  24.         self.SetToolTipString('Frame1')
  25.         self.Validation = wx.Button(id=wxID_FRAME1VALIDATION, label='Valider',
  26.               name='Validation', parent=self, pos=wx.Point(152, 344),
  27.               size=wx.Size(75, 23), style=0)
  28.         self.Validation.Bind(wx.EVT_BUTTON, self.OnValidationButton,
  29.               id=wxID_FRAME1VALIDATION)
  30.         self.quantity = wx.RadioBox(choices=["elevée", "moyenne", "faible"],
  31.               id=wxID_FRAME1QUANTITY, label='Quantit\xe9', majorDimension=1,
  32.               name='quantity', parent=self, pos=wx.Point(32, 56),
  33.               size=wx.Size(104, 80), style=wx.RA_SPECIFY_COLS)
  34.         quantity_var = self.quantity.GetStringSelection()
  35.        
  36.         self.precision = wx.RadioBox(choices=['élevée', 'moyenne', 'faible'],
  37.               id=wxID_FRAME1PRECISION, label='Pr\xe9cision', majorDimension=1,
  38.               name='precision', parent=self, pos=wx.Point(32, 136),
  39.               size=wx.Size(104, 88), style=wx.RA_SPECIFY_COLS)
  40.         self.precision.SetStringSelection("asd','moul" )
  41.         self.precision.SetToolTipString('radioBox1')
  42.         self.precision.SetHelpText('')
  43.         precision_var = self.precision.GetStringSelection()
  44.        
  45.         self.Delay = wx.RadioBox(choices=['serrés', 'larges'],
  46.               id=wxID_FRAME1DELAY, label='Delais', majorDimension=1,
  47.               name='Delay', parent=self, pos=wx.Point(32, 224),
  48.               size=wx.Size(104, 68), style=wx.RA_SPECIFY_COLS)
  49.         delay_var = self.Delay.GetStringSelection()
  50.        
  51.         self.cost = wx.RadioBox(choices=['serré', 'large'],
  52.               id=wxID_FRAME1RADIOBOX1, label='Budget', majorDimension=1,
  53.               name='radioBox1', parent=self, pos=wx.Point(32, 296),
  54.               size=wx.Size(104, 72), style=wx.RA_SPECIFY_COLS)
  55.         cost_var = self.cost.Getstringselection()
  56.        
  57.         self.staticBitmap1 = wx.StaticBitmap(bitmap=wx.Bitmap(u'D:/programation/Projets/visualmetro_wdr/MyBitmapsFunc_0.png',
  58.               wx.BITMAP_TYPE_PNG), id=wxID_FRAME1STATICBITMAP1,
  59.               name='staticBitmap1', parent=self, pos=wx.Point(144, 72),
  60.               size=wx.Size(128, 104), style=0)
  61.         self.staticBox1 = wx.StaticBox(id=wxID_FRAME1STATICBOX1,
  62.               label='Solution propos\xe9e', name='staticBox1', parent=self,
  63.               pos=wx.Point(280, 248), size=wx.Size(200, 100), style=0)
  64.         self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
  65.               label="Bienvenue dans l'application d'aide \xe0 la d\xe9cision pour les methodes de metrologie",
  66.               name='staticText1', parent=self, pos=wx.Point(16, 24),
  67.               size=wx.Size(472, 16), style=0)
  68.         self.staticText1.SetWindowVariant(wx.WINDOW_VARIANT_LARGE)
  69.         self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
  70.               label="Ici s'afficheras votre solution propos\xe9e",
  71.               name='staticText2', parent=self, pos=wx.Point(288, 264),
  72.               size=wx.Size(184, 80), style=0)
  73.         self.staticText2.SetThemeEnabled(False)
  74.         self.staticText2.SetToolTipString('staticText2')
  75.         self.staticText2.SetWindowVariant(wx.WINDOW_VARIANT_NORMAL)
  76.         self.staticText3 = wx.StaticText(id=wxID_FRAME1STATICTEXT3,
  77.               label='Cette solution vous est propos\xe9e par Sims57',
  78.               name='staticText3', parent=self, pos=wx.Point(248, 376),
  79.               size=wx.Size(257, 13), style=0)
  80.    
  81. def __init__(self, parent):
  82.         self._init_ctrls(parent)
  83. def OnGenStaticText1SetFocus(self, event):
  84.         event.Skip()
  85. def OnMenu2ProposMenu(self, event):
  86.         event.Skip()
  87. def OnValidationButton(self, event):
  88.     if quantity_var == 1:
  89.         if precision_var == 1:
  90.             if delay_var == 1:
  91.                 if cost_var == 1:
  92.                     self.statictext2.SetLabel("Vous pouvez utiliser une petite table de mesure tridimentionnelle" ) 
  93.                 else:
  94.                     self.statictext2.SetLabel("Vous pouvez utiliser une grande table de mesure tridimentionnelle" )   
  95.             else:
  96.                 if cost_var == 1:
  97.                     self.statictext2.SetLabel("Vous pouvez utiliser un projecteur de profil" )
  98.                 else:
  99.                     self.statictext2.SetLabel("Vous pouvez utiliser un projecteur de profil" )
  100.         elif precision_var == 2:
  101.             if delay_var == 1:
  102.                 if cost_var == 1:
  103.                     self.statictext2.SetLabel("Vous pouvez utiliser une table à avance micrométrique" )
  104.                 else:
  105.                     self.statictext2.SetLabel("Vous pouvez utiliser un projecteur de profil" )
  106.             else:
  107.                 if cost_var == 1:
  108.                     self.statictext2.SetLabel("Vous pouvez utiliser un projetteur de profil, un micromètre" )
  109.                 else:
  110.                     self.statictext2.SetLabel("Vous pouvez utiliser un projetteur de profil avec support informatique" )
  111.         elif precision_var == 3:
  112.             if delay_var == 1:
  113.                 if cost_var == 1:
  114.                     self.statictext2.SetLabel("Vous pouvez utiliser un pied d'angle/à coulisse" )
  115.                 else:
  116.                     self.statictext2.SetLabel("Vous pouvez utiliser des cales + micromètre" )
  117.             else:
  118.                 self.statictext2.setLabel("Vous pouvez utiliser des cales + comparateur" )
  119.     elif quantity_var == 2:
  120.         if precision_var == 1:
  121.             if delay_var == 1:
  122.                 if cost_var == 1:
  123.                     self.statictext2.SetLabel("Vous pouvez utiliser une petite table de mesure tridimentionnelle" ) 
  124.                 else:
  125.                     self.statictext2.SetLabel("Vous pouvez utiliser une petite table de mesure tridimentionnelle" )   
  126.             else:
  127.                 if cost_var == 1:
  128.                     self.statictext2.SetLabel("Vous pouvez utiliser un projecteur de profil" )
  129.                 else:
  130.                     self.statictext2.SetLabel("Vous pouvez utiliser un projecteur de profil" )
  131.         elif precision_var == 2:
  132.             if delay_var == 1:
  133.                 if cost_var == 1:
  134.                     self.statictext2.SetLabel("Vous pouvez utiliser une table à avance micrométrique" )
  135.                 else:
  136.                     self.statictext2.SetLabel("Vous pouvez utiliser un projecteur de profil" )
  137.             else:
  138.                 if cost_var == 1:
  139.                     self.statictext2.SetLabel("Vous pouvez utiliser un projetteur de profil, un micromètre" )
  140.                 else:
  141.                     self.statictext2.SetLabel("Vous pouvez utiliser un projetteur de profil avec support informatique" )
  142.         elif precision_var == 3:
  143.             if delay_var == 1:
  144.                 if cost_var == 1:
  145.                     self.statictext2.SetLabel("Vous pouvez utiliser un pied d'angle/à coulisse" )
  146.                 else:
  147.                     self.statictext2.SetLabel("Vous pouvez utiliser des cales + micromètre" )
  148.             else:
  149.                 self.statictext2.setLabel("Vous pouvez utiliser des cales + comparateur" )
  150.             event.Skip()


 
Je suis sûr d'être passé à côté de quelque chose d'évident  :??: . Mais quoi?
Je vous remercie d'avance d'avoir accordé un peu d'attention à mon problème. [:whiskas]


Message édité par Sims57 le 16-12-2008 à 16:51:52

---------------
Une seule DLL vous manque et tout est déréglé...
Reply

Marsh Posté le 16-12-2008 à 00:52:05   

Reply

Marsh Posté le 16-12-2008 à 16:26:39    

Dans ton "application" tu as un appel à app.MainLoop()

 

Sauf qu'il n'y a aucun objet "app" dans le script [:spamafote]

 

D'ailleurs je doute très fort que si tu lances ton script python directement il fonctionne, tu auras la même erreur.

 

Accessoirement, c'est vraiment dégueulasse ta série d'if/elif imbriqués [:petrus75]

 

Et le nom du fichier dans ton "script" est différent du nom de fichier de l' "application"


Message édité par masklinn le 16-12-2008 à 16:28:49

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 16-12-2008 à 17:26:48    

Donc je devrait renommer app.mainloop en frame1.mainloop?
 
Le problème du nom du fichier dans le script et de l'application est corrigé.
J'ai encore le problème disant comme quoi "Frame1" n'est pas définit. Pourtant, Frame1 existe dans le programme en lui-même non?


---------------
Une seule DLL vous manque et tout est déréglé...
Reply

Marsh Posté le 16-12-2008 à 18:28:30    

Sims57 a écrit :

Donc je devrait renommer app.mainloop en frame1.mainloop?


Aucune idée

Sims57 a écrit :


Le problème du nom du fichier dans le script et de l'application est corrigé.
J'ai encore le problème disant comme quoi "Frame1" n'est pas définit. Pourtant, Frame1 existe dans le programme en lui-même non?


T'as songé à apprendre comment python fonctionne [:pingouino dei]
 
Du début, j'veux dire [:pingouino dei]


Message édité par masklinn le 16-12-2008 à 18:28:42

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-12-2008 à 18:24:54    

Code :
  1. #                 if cost_var == 1:
  2. #                     self.statictext2.SetLabel("Vous pouvez utiliser une petite table de mesure tridimentionnelle" )
  3. #                 else:
  4. #                     self.statictext2.SetLabel("Vous pouvez utiliser une petite table de mesure tridimentionnelle" )


J'ai mal lu ou bien on fait la même chose dans les deux cas ?

Reply

Marsh Posté le 17-12-2008 à 18:43:22    

gzii a écrit :

Code :
  1. #                 if cost_var == 1:
  2. #                     self.statictext2.SetLabel("Vous pouvez utiliser une petite table de mesure tridimentionnelle" )
  3. #                 else:
  4. #                     self.statictext2.SetLabel("Vous pouvez utiliser une petite table de mesure tridimentionnelle" )


J'ai mal lu ou bien on fait la même chose dans les deux cas ?


 
 
Oui, effectivement, on fait la même chose dans les deux cas. J'ai fait le choix d'utiliser les deux versions de la variable pour des raisions de structure de code (si je me relis d'ici 6 mois et que je pense qu'une variable n'a pas été testée par exemple). Le code pourrait surrement être plus léger mais le poids et l'optimisation ne rentrent pas (encore) dans mon cahier des charges. (j'aurais dut commenter un peu mon code avant de le ballancer sur le forum  :ange: )
 
Finallement, j'ai réécris mon code pour fonctionner en ligne de commandes. La compilation a réussit. Pas envie de me prendre encore la tête sur Wx pour l'instant (je vais attendre le prochaine tuto du Siteduzero).
Je tient à m'excuser de ne pas connaitre par cœur la documentation python et d'être un noob.


---------------
Une seule DLL vous manque et tout est déréglé...
Reply

Marsh Posté le 17-12-2008 à 18:58:49    

gzii a écrit :

Code :
  1. #                 if cost_var == 1:
  2. #                     self.statictext2.SetLabel("Vous pouvez utiliser une petite table de mesure tridimentionnelle" )
  3. #                 else:
  4. #                     self.statictext2.SetLabel("Vous pouvez utiliser une petite table de mesure tridimentionnelle" )


J'ai mal lu ou bien on fait la même chose dans les deux cas ?


De toute façon la fonction OnValidationBouton (nommage qui va complètement à l'encontre de la PEP8 par ailleurs) ce sont 40 cas qui font la même chose en changeant juste la chaîne bindée, c'est immonde [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-12-2008 à 10:33:10    

Oui j'ai vu ça.
Du coup je m'étais posé la question pour les switch
(à proscrire ou pas je trouvais que ça donnait un code assez clair dans quelques cas en C/C++/java/autres).
Apparemment en Python c'est une bidouille, un dictionnaire ou autres ?


Message édité par gzii le 18-12-2008 à 10:33:58
Reply

Marsh Posté le 18-12-2008 à 11:15:07    

en python, on utilise un dict dans ce genre de cas (etici un case n'aiderait pas spécialement, il faudrait quand même en nester une demi-douzaine)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed