Echanges autour d'EduPython.
Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'avais essayer de faire l'exercice H2, télécran.
Au début, j'étais content de moi par la présentation mais je ne parviens pas à mettre la saisie dans la variable qui va me mettre le point de départ du dessin (choisi par l'utilisateur). Voici le programme. A force de tester, je ne m'y retrouve plus ! Ou cela coince-t-il ?
def pointd1(): global pdx return pdx.get() def pointd2(): global pdy return pdy.get() pdx=800 pdy=560 pdxx=pdx+5 pdyy=pdy+5 fen=Tk() fen.title("Telecran") fen.geometry("800x800") can=Canvas(fen,width=790, height=790,bg="black") can.place(x=0,y=0) text=can.create_text(400,40, fill="Blue",font=("Arial",40), text="TELECRAN") caa=Canvas(fen,width=750, height=550,bg="white") caa.place(x=10,y=200) pdx=Button(fen,bg="red",font=("Arial", 12),text="Quel est votre point de départ - Abscisse ?",command=pointd1) pdx.place(x=40,y=88) pdx=Entry(fen, width=15) pdx.place(x=400, y=90) pdx.focus() pdy=Button(fen,bg="red",font=("Arial",12),text="Quel est votre point de départ - Ordonnée ?",command=pointd2) pdy.place(x=40,y=128) pdy=Entry(fen, width=15) pdy.place(x=400,y=140) pdy.focus() print(pdx) print(pdy) el=caa.create_oval(pdx,pdy,pdxx,pdyy,fill="blue") fen.mainloop()
Normalement c'est bien le Get() qui prend la saisie !!!
Merci de m'aider
Eric
Hors ligne
Bonsoir, vous avez une variable pdx qui est entière et une autre du même nom pour le composant, je pense que c'est à cause de ça.
VM
Hors ligne
J'ai beau tourner le programme dans tous les sens, je n'y arrive pas.
En fait, je voudrais que l'utilisateur définisse le point de départ sur l'écran blanc.
L'écran se dessine bien mais je ne parviens pas à placer le point de départ !!!!
# Créé par Eric, le 17/11/2020 en Python 3.7 from tkinter import* def pointd1(): #global pdx return dx.get() pdx=eval(dx) def pointd2(): #global pdy return dy.get() pdy=eval(dy) fen=Tk() fen.title("Telecran") fen.geometry("800x800") can=Canvas(fen,width=790, height=790,bg="black") can.place(x=0,y=0) text=can.create_text(400,40, fill="Blue",font=("Arial",40), text="TELECRAN") caa=Canvas(fen,width=750, height=550,bg="white") caa.place(x=10,y=200) dx=Button(fen,bg="red",font=("Arial", 12),text="Quel est votre point de départ - Abscisse ?",command=pointd1) dx.place(x=40,y=88) dx=Entry(fen, width=15) dx.place(x=400, y=90) dx.focus() dy=Button(fen,bg="red",font=("Arial",12),text="Quel est votre point de départ - Ordonnée ?",command=pointd2) dy.place(x=40,y=128) dy=Entry(fen, width=15) dy.place(x=400,y=140) dy.focus() #print(pdx) #print(pdy) #el=caa.create_oval(pdx,pdy,pdx+10,pdy+10,fill="blue") fen.mainloop()
Dernière modification par vdperic (2020-12-03 16:15:25)
Hors ligne
Bonsoir, tout ce que vous mettez après un return est ignoré, car dès que Python lit une instruction return, il renvoie la valeur et quitte la fonction en question.
Vous pouvez faire un truc comme ça (mais ça utilise des variables globales) :
def pointd1(): global pdx pdx=int(dx.get()) def pointd2(): global pdy pdy=int(dy.get())
Vincent
Hors ligne
Ok mais alors j'ai le message suivant:
Traceback (most recent call last):
File "C:\Users\Eric\Documents\Programmes PYTHON\telecran.py", line 49, in <module>
el=caa.create_oval(pdx,pdy,pdx+10,pdy+10,fill="blue")
NameError: name 'pdx' is not defined
Hors ligne
Ah oui, si vous mettez
el=caa.create_oval(pdx,pdy,pdx+10,pdy+10,fill="blue")
avant que pdx et pdy ne soient définis (c.a.d que l'on ai cliqué sur les boutons, c'est normal.
Que voulez-vous faire en fait ?
VM
Hors ligne
je voudrais que l'utilisateur définisse le point de départ sur l'écran blanc.
Hors ligne
On peut faire quelque chose comme cela :
# Créé par Eric, le 17/11/2020 en Python 3.7 from tkinter import* def pointd1(): global pdx pdx=int(dx.get()) if pdx >= 0 and pdy >0 : # Les 2 coordonées sont saisies dessine() def pointd2(): global pdy pdy=int(dy.get()) if pdx >= 0 and pdy >0 : # Les 2 coordonées sont saisies dessine() def dessine() : caa.create_oval(pdx,pdy,pdx+10,pdy+10,fill="blue") fen=Tk() fen.title("Telecran") fen.geometry("800x800") can=Canvas(fen,width=790, height=790,bg="black") can.place(x=0,y=0) text=can.create_text(400,40, fill="Blue",font=("Arial",40), text="TELECRAN") caa=Canvas(fen,width=750, height=550,bg="white") caa.place(x=10,y=200) dx=Button(fen,bg="red",font=("Arial", 12),text="Quel est votre point de départ - Abscisse ?",command=pointd1) dx.place(x=40,y=88) dx=Entry(fen, width=15) dx.place(x=400, y=90) dx.focus() dy=Button(fen,bg="red",font=("Arial",12),text="Quel est votre point de départ - Ordonnée ?",command=pointd2) dy.place(x=40,y=128) dy=Entry(fen, width=15) dy.place(x=400,y=140) dy.focus() # On initialise les valeurs de pdx et pdy pdx = -1 pdy = -1 fen.mainloop()
En fait, il ne faut pas lancer le dessin avant que l'utilisateur ait cliqué sur les 2 boutons.
Bonne soirée,
VM
Hors ligne
Pages : 1