Forum EduPython

Echanges autour d'EduPython.

Vous n'êtes pas identifié(e).

#1 2020-11-22 17:01:53

vdperic
Membre
Lieu : Braine-l'Alleud
Inscription : 2020-11-13
Messages : 7

Telecran

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

#2 2020-11-22 18:05:12

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 274

Re : Telecran

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

#3 2020-12-03 16:13:32

vdperic
Membre
Lieu : Braine-l'Alleud
Inscription : 2020-11-13
Messages : 7

Re : Telecran

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

#4 2020-12-03 16:27:53

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 274

Re : Telecran

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

#5 2020-12-04 15:33:32

vdperic
Membre
Lieu : Braine-l'Alleud
Inscription : 2020-11-13
Messages : 7

Re : Telecran

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

#6 2020-12-04 18:07:59

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 274

Re : Telecran

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

#7 2020-12-05 17:27:06

vdperic
Membre
Lieu : Braine-l'Alleud
Inscription : 2020-11-13
Messages : 7

Re : Telecran

je voudrais que l'utilisateur définisse le point de départ sur l'écran blanc.

Hors ligne

#8 2020-12-05 17:46:36

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 274

Re : Telecran

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

Pied de page des forums