application operationel amelioree devient non fonctionnel

application operationel amelioree devient non fonctionnel - Python - Programmation

Marsh Posté le 06-08-2018 à 20:31:52    

Bonjour;
 
A titre d'information je suis débutant en ce qui concerne la programmation avec le langage "PYTHON"
 
je viens de créer une application simplifiée pour le moment  avec les widgets (Frame. Menu) qui fonctionnement correctement comme je le souhaite avec un nombre de lignes très élevé. Pour cela, j'ai opte a le perfectionner pour réduire son volume en modifiant la fonction (faire_apparaitre).
 
En exécutant le programme pas de bug mentionne mais le changement de couleur pour les frames en cliquant sur les sous-menu de l'onglet (ILS) ne fait pas changer la couleur du background de chaque frame comme ce que se passe pour l'application volumineuse
 
voici le code de l'application volumineuse (qui fonctionne a perfection) :
 

Code :
  1. #coding:utf-8
  2.  
  3. from tkinter import *
  4.  
  5. ############################################
  6. # fonction pour faire basculer l'affichage #
  7. # des frames : ILS_35L , ILS_35R , ILS_17R #
  8. ############################################
  9. def faire_apparaitre(frame):
  10.     global fen
  11.        
  12.     #pour faire apparaitre la frame (GP_35R) 
  13.     if frame!=loc_35L and frame!=loc_17R and frame!=loc_35R and frame!=gp_17R  and frame != gp_35L :
  14.         loc_35L.grid_forget()
  15.         loc_35R.grid_forget()
  16.         loc_17R.grid_forget()
  17.         gp_35L.grid_forget()     
  18.         gp_17R.grid_forget()       
  19.         gp_35R.grid()
  20.        
  21.     #pour faire apparaitre la frame (gp_35L) 
  22.     elif frame!=loc_35L and frame!=loc_17R and frame!=loc_35R and frame!=gp_17R  and frame != gp_35R :
  23.         loc_35L.grid_forget()
  24.         loc_35R.grid_forget()
  25.         loc_17R.grid_forget()
  26.         gp_35R.grid_forget()     
  27.         gp_17R.grid_forget()     
  28.         gp_35L.grid()
  29.        
  30.     #pour faire apparaitre la frame (gp_17R) 
  31.     elif frame!=loc_35L and frame!=loc_17R and frame!=loc_35R and frame!=gp_35L  and frame != gp_35R :
  32.         loc_35L.grid_forget()
  33.         loc_35R.grid_forget()
  34.         loc_17R.grid_forget()
  35.         gp_35L.grid_forget()     
  36.         gp_35R.grid_forget()
  37.         gp_17R.grid()
  38.        
  39.     #pour faire apparaitre la frame (loc_35L)
  40.     elif frame!=gp_35L and frame!=loc_17R and frame!=loc_35R and frame!=gp_17R  and frame != gp_35R :     
  41.         loc_35R.grid_forget()
  42.         loc_17R.grid_forget()
  43.         gp_17R.grid_forget()
  44.         gp_35L.grid_forget()     
  45.         gp_35R.grid_forget()         
  46.         loc_35L.grid()
  47.    
  48.     #pour faire apparaitre la frame (LOC_35R)
  49.     elif frame!=gp_35L and frame!=loc_17R and frame!=loc_35L and frame!=gp_17R  and frame != gp_35R :
  50.          
  51.         loc_35L.grid_forget()
  52.         loc_17R.grid_forget()
  53.         gp_17R.grid_forget()
  54.         gp_35L.grid_forget()     
  55.         gp_35R.grid_forget()     
  56.         loc_35R.grid()
  57.        
  58.     #pour faire apparaitre la frame (loc_17R)         
  59.     else:           
  60.         loc_35L.grid_forget()
  61.         loc_35R.grid_forget()
  62.         gp_17R.grid_forget()
  63.         gp_35L.grid_forget()     
  64.         gp_35R.grid_forget() 
  65.         loc_17R.grid()
  66.        
  67.     fen.update()
  68.    
  69. ###################################################
  70. # fonction pour faire disparaitre l'image de fond #
  71. ###################################################
  72. def supprimer_lb_image ():
  73.     global lb_image
  74.        
  75.     if lb_image!=None:
  76.         lb_image.destroy()
  77.         lb_image=None
  78.     else:
  79.         pass
  80. #######################################
  81. #             IMPORTANT (affichage des pages [loc,gp])
  82. ##########################################
  83. # afficher le contenu de la page (loc_35L)
  84. def afficher_loc_35L():
  85.     supprimer_lb_image ()#je supprime l'image pour afficher les frames
  86.     faire_apparaitre(loc_35L)
  87. # afficher le contenu de la page (loc_35R)
  88. def afficher_loc_35R():
  89.     supprimer_lb_image ()
  90.     faire_apparaitre(loc_35R)
  91.    
  92. # afficher le contenu de la page (loc_17R) 
  93. def afficher_loc_17R():
  94.     supprimer_lb_image () #je supprime l'image pour afficher les frames
  95.     faire_apparaitre(loc_17R)
  96. # afficher le contenu de la page (gp_35L)
  97. def afficher_gp_35L():
  98.     supprimer_lb_image ()#je supprime l'image pour afficher les frames
  99.     faire_apparaitre(gp_35L)
  100.    
  101. # afficher le contenu de la page (gp_35R)
  102. def afficher_gp_35R():
  103.     supprimer_lb_image ()
  104.     faire_apparaitre(gp_35R)
  105.        
  106. # afficher le contenu de la page (gp_17R) 
  107. def afficher_gp_17R():
  108.     supprimer_lb_image () #je supprime l'image pour afficher les frames
  109.     faire_apparaitre(gp_17R)
  110.        
  111.    
  112. def donothing():
  113.    filewin = Toplevel(fen)
  114.    button = Button(filewin, text="Do nothing button" )
  115.    button.grid()
  116.    
  117. def quitter():
  118.     fen.destroy()
  119.    
  120. ####################################
  121. # A propos de l'application : Info #
  122. ####################################
  123.    
  124. def info_de_application():
  125.     info=Toplevel(fen)
  126.     info.title('A propos de l\'application')
  127.     lb1=Label(
  128.     info,
  129.     font=('tahoma', 13, 'bold'),
  130.     fg='black', padx=15,
  131.     text='\nCette application a été conçue pour effectuer\nla correction demandée par l\'avion LABO\ndurant le contrôle en vol, de la ddm du signal\nrayonné par rapport à la ddm exigée par \nl\'avion LABO.\n',
  132.     justify='left')
  133.     lb1.grid()
  134.     lb2=Label(
  135.     info,
  136.     font=('tahoma', 12, 'bold'),
  137.     fg='black',
  138.     text='Version : 1.0\nCopyright © 2018\n',
  139.     justify='center')
  140.      
  141.     lb2.grid()
  142.  
  143.      
  144. ################################
  145. # fin patie application : Info #
  146. ################################
  147.    
  148. fen = Tk()
  149. fen.geometry('560x300+400+200')
  150. fen.title('System d\'atterissage : ILS')
  151.  
  152. ###############################################
  153. # cration de l'icone de la fenetre principale #
  154. ###############################################
  155.  
  156. fen.iconbitmap('cev.ico')#code pour visualiser un icone pour l'application
  157.  
  158. ##############################
  159. # cration de l'image de fond #
  160. ##############################
  161.  
  162. logo=PhotoImage(file='cev.png')
  163. lb_image=Label(fen,image=logo)#code pour visualiser l'image de fond
  164. lb_image.grid()
  165.  
  166. ######################################################
  167. # creations des frames : ILS_35L , ILS_35R , ILS_17R #
  168. ######################################################
  169. gp_35L=Frame(fen,width='560',height='300',bg='red')
  170. gp_35L.grid()
  171. gp_35R=Frame(fen, width='560',height='300',bg='pink')
  172. gp_35R.grid()
  173. gp_17R=Frame(fen, width='560',height='300',bg='powder blue')
  174. gp_17R.grid()
  175. loc_35L=Frame(fen, width='560',height='300', bg='green')
  176. loc_35L.grid()
  177. loc_35R=Frame(fen,width='560',height='300',bg='blue')
  178. loc_35R.grid()
  179. loc_17R=Frame(fen, width='560',height='300',bg='grey')
  180. loc_17R.grid()
  181.  
  182. ##########################################
  183. # debut du container Menu
  184. ##########################################
  185.  
  186. menu=Menu(fen)
  187. ################
  188. # onglet : ILS#
  189. ################
  190.    
  191. sousmenu=Menu(menu, tearoff=0)
  192. menu.add_cascade(label='ILS', menu=sousmenu)
  193. sous_sousmenu=Menu(sousmenu, tearoff=0)
  194. sousmenu.add_cascade(label='ILS 35R', menu=sous_sousmenu)
  195. sous_sousmenu.add_command(label="LOC 35R", command=afficher_loc_35R)
  196. sous_sousmenu.add_command(label="GP 35R", command=afficher_gp_35R)
  197. sous_sousmenu=Menu(sousmenu, tearoff=0)
  198. sousmenu.add_cascade(label='ILS 35L', menu=sous_sousmenu)
  199. sous_sousmenu.add_command(label="LOC 35L", command=afficher_loc_35L)
  200. sous_sousmenu.add_command(label="GP 35L", command=afficher_gp_35L)
  201. sous_sousmenu=Menu(sousmenu, tearoff=0)
  202. sousmenu.add_cascade(label='ILS 17R', menu=sous_sousmenu)
  203. sous_sousmenu.add_command(label="LOC 17R", command=afficher_loc_17R)
  204. sous_sousmenu.add_command(label="GP 17R", command= afficher_gp_17R)
  205. sousmenu.add_separator()
  206.  
  207. sousmenu.add_command(label="Quitter", command=quitter)
  208. fen.config(menu=menu)
  209.  
  210. fen.mainloop()


 
voici le deuxième code de l'application réduite qui ne fonctionne pas comme je le souhaite: (l'application plante sur une couleur et ne change pas qu'apres plusieures tentatives) :
 

Code :
  1. #coding:utf-8
  2.  
  3. from tkinter import *
  4.  
  5. ############################################
  6. # fonction pour faire basculer l'affichage #
  7. # des frames : ILS_35L , ILS_35R , ILS_17R #
  8. ############################################
  9. def faire_apparaitre(frame):
  10.     global fen
  11.     for item in ['loc_35L','loc_17R','loc_35R','gp_17R','gp_35L','gp_35R']:       
  12.         if item==frame:
  13.             supprimer_lb_image ()
  14.             frame.grid()
  15.            
  16.         else:
  17.             frame.grid_forget()
  18.         fen.update()
  19.    
  20. ###################################################
  21. # fonction pour faire disparaitre l'image de fond #
  22. ###################################################
  23. def supprimer_lb_image ():
  24.     global lb_image
  25.        
  26.     if lb_image!=None:
  27.         lb_image.destroy()
  28.         lb_image=None
  29.     else:
  30.         pass
  31. #######################################
  32. #             IMPORTANT (affichage des pages [loc,gp])
  33. ##########################################
  34. # afficher le contenu de la page (loc_35L)
  35. def afficher_loc_35L():
  36.     supprimer_lb_image ()#je supprime l'image pour afficher les frames
  37.     faire_apparaitre(loc_35L)
  38. # afficher le contenu de la page (loc_35R)
  39. def afficher_loc_35R():
  40.     supprimer_lb_image ()
  41.     faire_apparaitre(loc_35R)
  42.    
  43. # afficher le contenu de la page (loc_17R) 
  44. def afficher_loc_17R():
  45.     supprimer_lb_image () #je supprime l'image pour afficher les frames
  46.     faire_apparaitre(loc_17R)
  47. # afficher le contenu de la page (gp_35L)
  48. def afficher_gp_35L():
  49.     supprimer_lb_image ()#je supprime l'image pour afficher les frames
  50.     faire_apparaitre(gp_35L)
  51.    
  52. # afficher le contenu de la page (gp_35R)
  53. def afficher_gp_35R():
  54.     supprimer_lb_image ()
  55.     faire_apparaitre(gp_35R)
  56.        
  57. # afficher le contenu de la page (gp_17R) 
  58. def afficher_gp_17R():
  59.     supprimer_lb_image () #je supprime l'image pour afficher les frames
  60.     faire_apparaitre(gp_17R)
  61.        
  62.    
  63. def donothing():
  64.    filewin = Toplevel(fen)
  65.    button = Button(filewin, text="Do nothing button" )
  66.    button.grid()
  67.    
  68. def quitter():
  69.     fen.destroy()
  70.    
  71. ####################################
  72. # A propos de l'application : Info #
  73. ####################################
  74.    
  75. def info_de_application():
  76.     info=Toplevel(fen)
  77.     info.title('A propos de l\'application')
  78.     lb1=Label(
  79.     info,
  80.     font=('tahoma', 13, 'bold'),
  81.     fg='black', padx=15,
  82.     text='\nCette application a été conçue pour effectuer\nla correction demandée par l\'avion LABO\ndurant le contrôle en vol, de la ddm du signal\nrayonné par rapport à la ddm exigée par \nl\'avion LABO.\n',
  83.     justify='left')
  84.     lb1.grid()
  85.     lb2=Label(
  86.     info,
  87.     font=('tahoma', 12, 'bold'),
  88.     fg='black',
  89.     text='Version : 1.0\nCopyright © 2018\n',
  90.     justify='center')
  91.      
  92.     lb2.grid()
  93.  
  94.      
  95. ################################
  96. # fin patie application : Info #
  97. ################################
  98.    
  99. fen = Tk()
  100. fen.geometry('560x300+400+200')
  101. fen.title('System d\'atterissage : ILS')
  102.  
  103. ###############################################
  104. # cration de l'icone de la fenetre principale #
  105. ###############################################
  106.  
  107. fen.iconbitmap('cev.ico')#code pour visualiser un icone pour l'application
  108.  
  109. ##############################
  110. # cration de l'image de fond #
  111. ##############################
  112.  
  113. logo=PhotoImage(file='cev.png')
  114. lb_image=Label(fen,image=logo)#code pour visualiser l'image de fond
  115. lb_image.grid()
  116.  
  117. ######################################################
  118. # creations des frames : ILS_35L , ILS_35R , ILS_17R #
  119. ######################################################
  120. gp_35L=Frame(fen,width='560',height='300',bg='red')
  121. gp_35L.grid()
  122. gp_35R=Frame(fen, width='560',height='300',bg='pink')
  123. gp_35R.grid()
  124. gp_17R=Frame(fen, width='560',height='300',bg='powder blue')
  125. gp_17R.grid()
  126. loc_35L=Frame(fen, width='560',height='300', bg='green')
  127. loc_35L.grid()
  128. loc_35R=Frame(fen,width='560',height='300',bg='blue')
  129. loc_35R.grid()
  130. loc_17R=Frame(fen, width='560',height='300',bg='grey')
  131. loc_17R.grid()
  132.  
  133. ##########################################
  134. # debut du container Menu
  135. ##########################################
  136.  
  137. menu=Menu(fen)
  138. ################
  139. # onglet : ILS#
  140. ################
  141.    
  142. sousmenu=Menu(menu, tearoff=0)
  143. menu.add_cascade(label='ILS', menu=sousmenu)
  144. sous_sousmenu=Menu(sousmenu, tearoff=0)
  145. sousmenu.add_cascade(label='ILS 35R', menu=sous_sousmenu)
  146. sous_sousmenu.add_command(label="LOC 35R", command=afficher_loc_35R)
  147. sous_sousmenu.add_command(label="GP 35R", command=afficher_gp_35R)
  148. sous_sousmenu=Menu(sousmenu, tearoff=0)
  149. sousmenu.add_cascade(label='ILS 35L', menu=sous_sousmenu)
  150. sous_sousmenu.add_command(label="LOC 35L", command=afficher_loc_35L)
  151. sous_sousmenu.add_command(label="GP 35L", command=afficher_gp_35L)
  152. sous_sousmenu=Menu(sousmenu, tearoff=0)
  153. sousmenu.add_cascade(label='ILS 17R', menu=sous_sousmenu)
  154. sous_sousmenu.add_command(label="LOC 17R", command=afficher_loc_17R)
  155. sous_sousmenu.add_command(label="GP 17R", command= afficher_gp_17R)
  156. sousmenu.add_separator()
  157.  
  158. sousmenu.add_command(label="Quitter", command=quitter)
  159.  
  160. fen.config(menu=menu)
  161.  
  162.  
  163. fen.mainloop()


 
J'aimerais bien qu'on m'aide a trouver pourquoi le deuxieme code ne marche pas comme je le souhaite
 
Merci pour l'aide

Reply

Marsh Posté le 06-08-2018 à 20:31:52   

Reply

Marsh Posté le 07-08-2018 à 01:26:21    

Tu as mis frame la ou il fallait item dans faire_apparaitre
 
On peut réécrire le code initial en simplifiant:

Code :
  1. #coding:utf-8
  2.  
  3. from tkinter import *
  4.  
  5. ############################################
  6. # fonction pour faire basculer l'affichage #
  7. # des frames : ILS_35L , ILS_35R , ILS_17R #
  8. ############################################
  9. def faire_apparaitre(frame):
  10.    global fen
  11.    for item in (loc_35L, loc_17R, loc_35R, gp_17R, gp_35L, gp_35R):      
  12.        if item!=frame:
  13.            item.grid_forget()
  14.    frame.grid()
  15.    fen.update()
  16.  
  17. ###################################################
  18. # fonction pour faire disparaitre l'image de fond #
  19. ###################################################
  20. def supprimer_lb_image ():
  21.    global lb_image
  22.      
  23.    if lb_image!=None:
  24.        lb_image.destroy()
  25.        lb_image=None
  26.  
  27. #######################################
  28. #  IMPORTANT (affichage des pages [loc,gp])
  29. ##########################################
  30. # afficher le contenu de la page (frame)
  31. def afficher_frame(frame):
  32.    supprimer_lb_image ()#je supprime l'image pour afficher les frames
  33.    faire_apparaitre(frame)
  34.  
  35. def donothing():
  36.   filewin = Toplevel(fen)
  37.   button = Button(filewin, text="Do nothing button" )
  38.   button.grid()
  39.  
  40. def quitter():
  41.    fen.destroy()
  42.  
  43. ####################################
  44. # A propos de l'application : Info #
  45. ####################################
  46.  
  47. def info_de_application():
  48.    info=Toplevel(fen)
  49.    info.title('A propos de l\'application')
  50.    lb1=Label(
  51.    info,
  52.    font=('tahoma', 13, 'bold'),
  53.    fg='black', padx=15,
  54.    text='\nCette application a été conçue pour effectuer\nla correction demandée par l\'avion LABO\ndurant le contrôle en vol, de la ddm du signal\nrayonné par rapport à la ddm exigée par \nl\'avion LABO.\n',
  55.    justify='left')
  56.    lb1.grid()
  57.    lb2=Label(
  58.    info,
  59.    font=('tahoma', 12, 'bold'),
  60.    fg='black',
  61.    text='Version : 1.0\nCopyright © 2018\n',
  62.    justify='center')
  63.    
  64.    lb2.grid()
  65.  
  66.    
  67. ################################
  68. # fin patie application : Info #
  69. ################################
  70.  
  71. fen = Tk()
  72. fen.geometry('560x300+400+200')
  73. fen.title('System d\'atterissage : ILS')
  74.  
  75. ###############################################
  76. # cration de l'icone de la fenetre principale #
  77. ###############################################
  78.  
  79. fen.iconbitmap('cev.ico')#code pour visualiser un icone pour l'application
  80.  
  81. ##############################
  82. # cration de l'image de fond #
  83. ##############################
  84.  
  85. logo=PhotoImage(file='cev.png')
  86. lb_image=Label(fen,image=logo)#code pour visualiser l'image de fond
  87. lb_image.grid()
  88.  
  89. ######################################################
  90. # creations des frames : ILS_35L , ILS_35R , ILS_17R #
  91. ######################################################
  92. frames = []
  93. colors = ['red', 'pink', 'powder blue', 'green', 'blue', 'grey']
  94. for i in range(0,6):
  95.    frames.append(Frame(fen,width='560',height='300',bg=colors[i]))
  96.    frames[i].grid()
  97.  
  98. (loc_35L, loc_17R, loc_35R, gp_17R, gp_35L, gp_35R) = tuple(frames)
  99.  
  100. ##########################################
  101. # debut du container Menu
  102. ##########################################
  103.  
  104. menu=Menu(fen)
  105. ################
  106. # onglet : ILS#
  107. ################
  108.  
  109. sousmenu=Menu(menu, tearoff=0)
  110. menu.add_cascade(label='ILS', menu=sousmenu)
  111. sous_sousmenu=Menu(sousmenu, tearoff=0)
  112. sousmenu.add_cascade(label='ILS 35R', menu=sous_sousmenu)
  113. sous_sousmenu.add_command(label="LOC 35R", command=lambda: afficher_frame(loc_35R))
  114. sous_sousmenu.add_command(label="GP 35R", command=lambda: afficher_frame(gp_35R))
  115. sous_sousmenu=Menu(sousmenu, tearoff=0)
  116. sousmenu.add_cascade(label='ILS 35L', menu=sous_sousmenu)
  117. sous_sousmenu.add_command(label="LOC 35L", command=lambda: afficher_frame(loc_35L))
  118. sous_sousmenu.add_command(label="GP 35L", command=lambda: afficher_frame(gp_35L))
  119. sous_sousmenu=Menu(sousmenu, tearoff=0)
  120. sousmenu.add_cascade(label='ILS 17R', menu=sous_sousmenu)
  121. sous_sousmenu.add_command(label="LOC 17R", command=lambda: afficher_frame(loc_17R))
  122. sous_sousmenu.add_command(label="GP 17R", command=lambda: afficher_frame(gp_17R))
  123. sousmenu.add_separator()
  124.  
  125. sousmenu.add_command(label="Quitter", command=quitter)
  126. fen.config(menu=menu)
  127.  
  128. fen.mainloop()


A+,


Message édité par gilou le 07-08-2018 à 01:43:59

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 07-08-2018 à 02:51:15    

bonsoir;
merci pour avoir rectifié  le code initial. j'essaie de comprendre les améliorations apportées au code

Reply

Marsh Posté le 07-08-2018 à 08:46:38    

La seule vraie amélioration, c'est de passer par un lambda pour éviter de définir 6 fois le même appel de fonction avec un paramètre différent associées aux 6 commandes.
Au final, c'est pareil (6 fonctions anonymes différentes associées aux 6 commandes), mais c'est bien plus lisible et maintenable.
 
Notes que je suis absolument pas programmeur python ( [:maestro fantastico:2], perl rulez, etc.) , un programmeur expérimenté trouvera surement d'autres améliorations à y apporter.
 
A+,


Message édité par gilou le 07-08-2018 à 08:52:19

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 07-08-2018 à 09:25:35    

Tu ne travaillerais pas sur un aéroport ou pour le contrôle aêrien, toi? :D Parce qu'on voit pleins de ILS, LOC...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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