Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2530 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [instruction lambda] variable non initialisée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[instruction lambda] variable non initialisée

n°1314727
airod
Posté le 27-02-2006 à 19:28:06  profilanswer
 

j'ai ecris des fonctions pemettant de dessinner des rectangles dans un Canvas.
Jusqu'ici ca roule.
au début j'ai récupéré mes variables par la fonction 'gobal'
 
mes fonction se comportent trés bien.
 
Afin de pouvoir utiliser ces fonctions dans un autre programme, j'ai modifier ces derniéres pour passer les variables a l'aide de l'instruction Lambda. Et là, c'est incompréhensible. Mes fonctions ne fonctionnent plus comme prévues.
 
en effet, le cadrage temporaire ne s'éfface plus, et la varaible 'rect_m' n'est pas initialisé a chaque appel de fonction.
bref, je cherche d'ou ca peut venir depuis prés de 2 jours sans succés, alors si qqu'un peut m'aider!
 
voici le code défectueux:

Code :
  1. # -*- coding: cp1252 -*-
  2. import Tkinter as tk
  3. import tkMessageBox
  4. ### VARIABLES  ###########
  5. coord_master,coord_cadre,coord_point='','',[]
  6. x,y,X,Y=0,0,0,0
  7. typer=''
  8. rect_m,rect_c='','coucou'
  9. ov_m,ov_c='',''
  10. blocker,blocker2=0,0
  11. canvas=''
  12. def rectf(rect_m):#bouton cadrage
  13.     canvas.bind('<Button-1>',lambda event,rect=rect_m:rect_f(event,rect))
  14.     canvas.bind('<ButtonRelease-1>',func=tk.NONE)
  15.     canvas.bind('<B1-Motion>',func=tk.NONE)
  16. def masterf(rect_m,canvas):#bouton cadre de placement
  17.     canvas.bind('<Button-1>',lambda event,rect=rect_m,can=canvas:master_rectf(event,rect,can))
  18.     canvas.bind('<ButtonRelease-1>',func=tk.NONE)
  19.     canvas.bind('<B1-Motion>',func=tk.NONE)
  20. ##########################
  21. def rect_f(event):
  22.        
  23.     if blocker==0:
  24.         global x,y
  25.         x,y=event.x,event.y
  26.         canvas.bind('<ButtonRelease-1>',dess_rectf)
  27.         canvas.bind('<B1-Motion>',rect_tempf)
  28.     elif blocker==1:
  29.         tkMessageBox.showinfo('Cadrage','Vous avez déjà mis en place\n le rectangle de cadrage')
  30. def dess_rectf(event):
  31.     global x,y,X,Y,coord_cadre,blocker,coord_master,coord_point,rect_c
  32.     lmaster,hmaster=float(coord_master[2]-coord_master[0]),float(coord_master[3]-coord_master[1])
  33.     x2,y2=0,0
  34.     X,Y=event.x,event.y
  35.     if X<x:
  36.         if Y<y:
  37.             Y=int(y-(((x-X)*hmaster)/lmaster))
  38.             x2,y2=X+((x-X)/2),(Y+((y-Y)/2))-2
  39.         else:
  40.             Y=int(y+(((x-X)*hmaster)/lmaster))
  41.             x2,y2=X+((x-X)/2),(Y-((Y-y)/2))-2
  42.     else:
  43.         if Y>y:
  44.             Y=int(y-(((x-X)*hmaster)/lmaster))
  45.             x2,y2=X-((X-x)/2),(Y-((Y-y)/2))-2
  46.         else:
  47.             Y=int(y+(((x-X)*hmaster)/lmaster))
  48.             x2,y2=X-((X-x)/2),(Y+((y-Y)/2))-2
  49.            
  50.     canvas.delete(rect_c)
  51.     canvas.delete(ov_c)
  52.     rect_c=canvas.create_rectangle(x,y,X,Y,width=2,outline='green',dash=(4,6))
  53.     canvas.bind('<B1-Motion>',func=tk.NONE)
  54.     canvas.bind('<ButtonRelease-1>',func=tk.NONE)
  55.     coord_cadre=(x,y,X,Y,rect_c) #liste des coordonnées du rectangle
  56.            
  57.     ID=canvas.create_oval(x2-5,y2-5,x2+5,y2+5,outline='yellow',width=2,fill='yellow')
  58.     coord_point.append((ID,x2,y2))
  59.     blocker=1
  60. def rect_tempf(event):
  61.     ## dessin provisoire du cadrage
  62.     global x,y,X,Y,ov_c,coord_master,rect_c
  63.     ##
  64.     lmaster,hmaster=float(coord_master[2]-coord_master[0]),float(coord_master[3]-coord_master[1])
  65.     X2,Y2=event.x,event.y
  66.     if X2<x:
  67.         if Y2<y:
  68.             Y2=y-(((x-X2)*hmaster)/lmaster)
  69.             x2,y2=X2+((x-X2)/2),(Y2+((y-Y2)/2))-2
  70.         else:
  71.             Y2=y+(((x-X2)*hmaster)/lmaster)
  72.             x2,y2=X2+((x-X2)/2),(Y2-((Y2-y)/2))-2
  73.     else:
  74.         if Y2<y:
  75.             Y2=y-(((x-X2)*hmaster)/lmaster)
  76.             x2,y2=X2-((X2-x)/2),(Y2+((y-Y2)/2))-2
  77.         else:
  78.             Y2=y+(((x-X2)*hmaster)/lmaster)
  79.             x2,y2=X2-((X2-x)/2),(Y2-((Y2-y)/2))-2
  80.    
  81.     canvas.delete(rect_c)
  82.     canvas.delete(ov_c)
  83.     if X2<x:
  84.         if Y2<y:
  85.             Y2=y-(((x-X2)*hmaster)/lmaster)
  86.             x2,y2=X2+((x-X2)/2),(Y2+((y-Y2)/2))-2
  87.         else:
  88.             Y2=y+(((x-X2)*hmaster)/lmaster)
  89.             x2,y2=X2+((x-X2)/2),(Y2-((Y2-y)/2))-2
  90.     else:
  91.         if Y2<y:
  92.             Y2=y-(((x-X2)*hmaster)/lmaster)
  93.             x2,y2=X2-((X2-x)/2),(Y2+((y-Y2)/2))-2
  94.         else:
  95.             Y2=y+(((x-X2)*hmaster)/lmaster)
  96.             x2,y2=X2-((X2-x)/2),(Y2-((Y2-y)/2))-2
  97.            
  98.            
  99.     rect_c=canvas.create_rectangle(x,y,X2,Y2,width=1,outline='green',dash=(6,4))
  100.     ov_c=canvas.create_oval(x2-5,y2-5,x2+5,y2+5,fill='yellow',width=1)
  101.    
  102. ##########################################################################   
  103. ########## Dessin du rectangle de placement ##############################
  104. def master_rectf(event,rect_m,canvas):
  105.     if blocker2==0:
  106.         global x,y
  107.         x,y=event.x,event.y
  108.         canvas.bind('<ButtonRelease-1>',lambda event,rect=rect_m,can=canvas:dess_master_rectf(event,rect,can))
  109.         canvas.bind('<B1-Motion>',lambda event,rect=rect_m,can=canvas:master_rect_tempf(event,rect,can))
  110.     elif blocker2==1:
  111.         tkMessageBox.showinfo('Cadrage','Vous avez déjà mis en place\n le rectangle de cadrage')
  112. def master_rect_tempf(event,rect_m,canvas):
  113.     ## dessin provisoire du cadrage
  114.     global x,y,ov_m
  115.    
  116.     X2,Y2=event.x,event.y
  117.     x2,y2=X2-((X2-x)/2),(Y2-((Y2-y)/2))-2
  118.     canvas.delete(rect_m)
  119.     canvas.delete(ov_m)
  120.     X2,Y2=event.x,event.y
  121.     rect_m=canvas.create_rectangle(x,y,X2,Y2,width=1,outline='blue',dash=(6,4))
  122.     x2,y2=X2-((X2-x)/2),(Y2-((Y2-y)/2))-2
  123.     ov_m=canvas.create_oval(x2-5,y2-5,x2+5,y2+5,fill='blue',width=1)
  124.     print rect_m
  125. def dess_master_rectf(event,rect_m,canvas):
  126.     ##def dessin rectangle#######################
  127.     global x,y,X,Y,blocker2,coord_master
  128.    
  129.     canvas.delete(rect_m)
  130.     canvas.delete(ov_m)
  131.     X,Y=event.x,event.y
  132.     rect_m=canvas.create_rectangle(x,y,X,Y,width=2,outline='blue',dash=(4,6))
  133.     canvas.bind('<B1-Motion>',func=tk.NONE)
  134.     canvas.bind('<ButtonRelease-1>',func=tk.NONE)
  135.     coord_master=(x,y,X,Y,rect_m) #liste des coordonnées du rectangle
  136.     x2,y2=X-((X-x)/2),(Y-((Y-y)/2))-2
  137.     blocker2=1
  138.     print rect_m
  139. ###########################
  140.         ###################
  141.         ###################
  142. if __name__ == '__main__':
  143.     root=tk.Tk()
  144.     canvas=tk.Canvas(root,height=400,width=400,bg='black')
  145.     canvas.grid()
  146.     tk.Button(root,text='master',command=lambda rect=rect_m,can=canvas:masterf(rect,can)).grid()
  147.     tk.Button(root,text='Cadre',command=rectf).grid()
  148.     tk.Button(root,text='Quit',command=root.quit).grid()
  149.    
  150.     root.mainloop()
  151.     root.destroy()
  152.     print rect_m


 
utiliser uniquement le bouton master, si vous testez, le bouton cadre est dependant de la bonne exe des fonctions master.
 
HELP ME, je suis a l'arret total sur le projet si je ne résoud pas le soucis
 

mood
Publicité
Posté le 27-02-2006 à 19:28:06  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [instruction lambda] variable non initialisée

 

Sujets relatifs
Variable variable en DOS ????appeller une fonction en javascript à l'aide d'un variable
incrementation d'une variable ($var1, $var2, $var3, ...)Variable php
[Batch] Modifier 1 variable d'environnement en cours d'éxécution[resolu]Problème de variable
[C++ débutant]Constructeur prenant un nombre de paramètres variable ?résolu Problème de concaténation de variable
[resolu] Liste dynamiques liées, pb de récupération de variableEst ce que l'on peut faire passer une variable avec un header ?
Plus de sujets relatifs à : [instruction lambda] variable non initialisée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR