CODE |
from Tkinter import * def printit(event): words=dict([("..--..","?"),("--..--",","),(".-.-.-","."),("----.","9"),("---..","8"), ("--...","7"), ("-....","6"), (".....","5"), ("....-","4"), ("...--","3"), ("..---","2"), (".----","1"), ("-----","0"), ("--..","z"), ("-.--","y"), ("-..-","x"), ("...-","v"), ("--.-","q"), (".---","j"), ("....","h"), ("..-.","f"), ("-.-.","c"), ("-...","b"), (".--.","p"), ("..-", "u"), ("...","s"), (".-.","r"), ("---","o"), ("-.-","k"), ("--.","g"), ("-..","d"), ("-.","n"), ("..","i"), ("--","m"), (".-","a"), (".","e"), ("-","t"), (".-..","l"), (".--","w")]) fichier=unicode(ent.get()) sfichier="" caractere="0" counter=0 while caractere<>"": if counter<int(len(fichier)): caractere=fichier[counter] else: caractere="" counter=counter+1 chaine ="" while ( caractere=="." or caractere=="-"): chaine=chaine+caractere if counter<int(len(fichier)): caractere=fichier[counter] else: caractere="" counter=counter+1 if words.has_key(chaine): schaine=words[chaine] chaine="" caractere="." sfichier=sfichier+unicode(schaine) else: sfichier=sfichier+unicode(chaine) chaine="" if (caractere=="." or caractere=="-"): caractere="0" else: sfichier=sfichier+unicode(caractere) lab.configure(text=unicode(sfichier)) fen=Tk() ent=Entry(fen) lab=Label(fen) ent.bind("<Return>",printit) ent.pack() lab.pack() fen.mainloop() |
\o/ Python \o/
Par contre tu devrais réécrire ton programme avec une approche plus "pythonesque". Par exemple au lieu de if (caractere=="." or caractere=="-") tu peux mettre :
if caractere in ".-"
:-))
Héhé c'est étrange, j'ai moi aussi remis la main sur python, à partir de tutos comme les cours de Gfx et "Dive into pyhton". Pour l'instant je suis un peu frustré par la vieillesse de ce que j'ai, mais j'espère pouvoir bientôt récuperer des trucs plus récents. Dans "Dive ..." y'a un exemple d'utilisation de parser html et xml qui permet de convertir un texte anglais "normal" en texte "swedish cook", "elmer", etc, très rigolo ;-)
Pourquoi vieux ? Le langage n'a subit que peu de changements récemmenet et ce sont seulement des modifications utiles aux personnes le connaissant déjà bien ^^
m'enfin pour les if un peu lourd, disons que je n'ai pas cherché de meilleure solution (et j'en suis qu'au debut dudit bouquqin .. ) et le basic laisse de terribles sequelles ...
le petit dernier :
CODE |
# -*- coding: cp1252 -*- from Tkinter import * from math import * #Données initiales cvSize=400 #Taille du Canvas echelle=800000/cvSize #calcul de l'echelle en Km par pixel eDiam=12756/200 #diametre du premier cercle en pixel lDiam=3476/200 #diametre du seconde cercle en pixel m1=5.9742E24 #en kg m2= 7.349E22 #en kg distanc=384400 #distance séparant les cercles (en km) x1=eDiam/2 y1=cvSize/2 x2=x1+ (distanc/echelle) y2=y1 #Definitions des fonctions de modifications de coordonnees # cercle 1 def haut(): global x1,y1 y1=y1-10 if y1<0: y1=0 cosmos.coords(earth,x1,y1,x1+eDiam,y1+eDiam) l2upd() def gauche(): global x1,y1 x1=x1-10 if x1<0: x1=0 cosmos.coords(earth,x1,y1,x1+eDiam,y1+eDiam) l2upd() def droite(): global x1,y1 x1=x1+10 if x1>(cvSize-eDiam): x1=cvSize-eDiam cosmos.coords(earth,x1,y1,x1+eDiam,y1+eDiam) l2upd() def bas(): global x1,y1 y1=y1+10 if y1>(cvSize-eDiam): y1=cvSize-eDiam cosmos.coords(earth,x1,y1,x1+eDiam,y1+eDiam) l2upd() # cercle 2 def hauta(): global x2,y2 y2=y2-10 if y2<0: y2=0 cosmos.coords(moon,x2,y2,x2+lDiam,y2+lDiam) l2upd() def gauchea(): global x2,y2 x2=x2-10 if x2<0: x2=0 cosmos.coords(moon,x2,y2,x2+lDiam,y2+lDiam) l2upd() def droitea(): global x2,y2 x2=x2+10 if x2>(cvSize-lDiam): x2=cvSize-lDiam cosmos.coords(moon,x2,y2,x2+lDiam,y2+lDiam) l2upd() def basa(): global x2,y2 y2=y2+10 if y2>(cvSize-lDiam): y2=cvSize-lDiam cosmos.coords(moon,x2,y2,x2+lDiam,y2+lDiam) l2upd() #Calcul de la distance entre les cercles def distance(): x=abs((x2+lDiam/2)-(x1+eDiam/2)) y=abs((y2+lDiam/2)-(y1+eDiam/2)) d=sqrt(x**2+y**2)*echelle return d #Calcul de la force gravitationelle entre les cercles def forceg(): resultat=6.67E-11*m1*m2/(distance())**2 return resultat #Mise à jour du texte de lab2 def l2upd(): lab2.configure(text="Distance : "+str(distance())+\ " Kilometres. Force gravitationelle : "+str(forceg())+" Newtons.") #Fenêtre principale fen=Tk() lab1=Label(fen,text="Cercle bleu : "+str(m1)+" kg. Cercle blanc : "+str(m2)+\ " kg. Echelle : 1 pixel pour "+str(echelle)+" km") lab1.grid(row=0, column=0) cosmos=Canvas(fen,bg="black",height=cvSize,width=cvSize) cosmos.grid(row=1, column=0,rowspan=6) lab2=Label(fen) lab2.grid(row=7,column=0) earth=cosmos.create_oval(x1,y1,x1+eDiam,y1+eDiam,outline="blue",fill="blue") moon=cosmos.create_oval(x2,y2,x2+lDiam,y2+lDiam,outline="white",fill="white") haut1=Button(fen,text="Haut",command=haut) bas1=Button(fen,text="Bas",command=bas) gauche1=Button(fen,text="Gauche",command=gauche) droite1=Button(fen,text="Droite",command=droite) haut2=Button(fen,text="Haut",command=hauta) bas2=Button(fen,text="Bas",command=basa) gauche2=Button(fen,text="Gauche",command=gauchea) droite2=Button(fen,text="Droite",command=droitea) haut1.grid(row=1,column=2) bas1.grid(row=3,column=2) gauche1.grid(row=2,column=1) droite1.grid(row=2,column=3) haut2.grid(row=4,column=2) bas2.grid(row=6,column=2) gauche2.grid(row=5,column=1) droite2.grid(row=5,column=3) l2upd() fen.mainloop() |
C'est pas nécessaire l'utilisation de "global" normalement
ben, si je le retire (ou que je tentes de le declarer à la C), j'ai le droit à ça :
CODE |
Exception in Tkinter callback Traceback (most recent call last): File "C:\Python23\lib\lib-tk\Tkinter.py", line 1345, in __call__ return self.func(*args) File "C:\Documents and Settings\Le Meut\Mes documents\ex81.py", line 19, in ha ut y1=y1-10 UnboundLocalError: local variable 'y1' referenced before assignment |
Ah pardon j'avais pas fait gaffe que tes fonctions sont des handlers Tk. Au temps pour moi. C'est bien bien crade et laid le Tk quand même ^^
Gfx> Ce sont mes tutos qui sont "vieux", c'est à dire un peu basique et peu représentatifs de toutes les choses fonfonnes que l'on peu faire avec Python, du moins j'imagine, ayant vaguement entendu parler de Zope et ressentant à cet égard une trique impressionnante .
Sha>
http://www.ulg.ac.be/cifen/inforef/swi/python.htm
avant de l'acheter, tu peux toujours le lire ...
(chouette : l'exercie suivant, c'est l'amélioration de l'interface .. je vais en profiter pour changer le système de coords ... )
et hop :
CODE |
def clikit(event): global objet,x1,y1,x2,y2 x=event.x y=event.y if objet=="": if ((x-x1)**2+(y-y1)**2)<=eDiam**2: objet=earth elif ((x-x2)**2+(y-y2)**2)<=lDiam**2: objet=moon elif objet==earth: x1,y1=x,y cosmos.coords(earth,x1-(eDiam/2),y1-(eDiam/2),x1+(eDiam/2),y1+(eDiam/2)) objet="" elif objet==moon: x2,y2=x,y cosmos.coords(moon,x2-(lDiam/2),y2-(lDiam/2),x2+(lDiam/2),y2+(lDiam/2)) objet="" l2upd() |
Merci Momo, juste ce que je cherchais
et hop :
CODE |
# -*- coding: Latin-1 -*- from Tkinter import * # Definition des classes à utiliser : class Cercle(Canvas): def __init__(self,boss=None,larg=200,haut=200): Canvas.__init__(self) self.configure(width=larg,height=haut) self.larg,self.haut=larg,haut def traceCercle(self, taille=5, coul="red"): posx,posy=(self.larg/2)-taille,(self.haut/2)-taille taix,taiy=posx+2*taille,posy+2*taille n=self.create_oval(posx,posy,taix,taiy,outline=coul,fill=coul) return n class ChoixTaille(Frame): def __init__(self, boss=None): Frame.__init__(self) self.taille=5 Scale(self, length=150, orient=HORIZONTAL,sliderlength=25,\ label="Taille du cercle", from_=5, to_=100,tickinterval=15,\ resolution=1,showvalue=1,command=self.setTaille).pack() def setTaille(self,f): self.taille=int(f) self.event_generate('<Control-Z>') def getTaille(self): n=self.taille return n #definition de la fenêtre principale class TailleCercle(Frame): def __init__(self,boss=None): Frame.__init__(self) self.gra=Cercle(self,larg=400,haut=400) self.gra.configure(bg="black") self.gra.pack(side=TOP) self.cercle="" self.controle=ChoixTaille(self) self.controle.pack() self.master.bind("<Control-Z>",self.montreCercle) self.master.title("Variation de taille d'un cercle") self.pack() def montreCercle(self,event): self.gra.delete(self.cercle) self.cercle=self.gra.traceCercle(taille=int(self.controle.getTaille()),coul="White") #programme principal if __name__=="__main__": TailleCercle().mainloop() |
JE VEUX ME REMETTRE A PROGRAMMER !!! OUINNNNNNNN !!!
ça tombe bien, il y a un ou deux liens qui trainenet dans le sujet à ce propos ...
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)