Tkinter

Fermé
Romain - Modifié le 6 sept. 2021 à 16:34
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 6 sept. 2021 à 21:14
Bonjour,
je commence juste à utiliser Tkinter et j'aimerais savoir pourquoi dans mon petit programme la boule ne se déplace pas à droite ?

from tkinter import * 

PosX1 = 70
PosY1 = 70

def start():
  global PosX1
  PosX1 += 1

fenetre = Tk()

canvas = Canvas(fenetre, width=700, height=500, background='white')
ligne1 = canvas.create_line(30, 30, 30, 470)
ligne2_1 = canvas.create_line(30, 30, 320, 30)
ligne2_2 = canvas.create_line(380, 30, 670, 30)
ligne3 = canvas.create_line(670, 30, 670, 470)
ligne4 = canvas.create_line(30, 470, 670, 470)

boule1 = canvas.create_oval(PosX1, PosY1, PosX1+20, PosY1+20, fill='black')

canvas.pack()

start()

fenetre.mainloop()

7 réponses

Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 6 sept. 2021 à 16:41
Pas du tout, tu crée une boule à x70 y70 et ensuite tu modifie PosX1, mais ça n'agit pas sur la boule déjà créée

mainloop() est la boucle qui attend les évènements de la fenêtre, c'est ce qui fait que le programme ne s'arrête pas après l'instruction start() et que la fenêtre reste affichée,
au contraire d'un programme qui s'exécuterai en mode console, par exemple, et dont on sort après la dernière instruction

cette boucle attend des évènements comme un clic sur un bouton, ou un clic sur quelque chose sur le Canvas, ou que l'on entre une valeur dans une Entry box, ou que l'on ferme la fenêtre, etc ...

Google est ton ami, à toi de trouver comment déplacer la boule .... :-)

(il y a une méthode pour modifier les coordonnées d'un objet)
1
yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 Ambassadeur 1 568
5 sept. 2021 à 18:20
bonjour,
peux-tu utiliser les balises de code pour poster ton code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

je ne vois rien dans ton programme qui "déplace" la boule.
0
En faite je pense, mais c'est surement pas comme ca qu'il faut faire, que le 'start' incremente indefiniment la valeur de PosX1 et donc que ca déplace progressivement la boule.
from tkinter import * 

PosX1 = 70
PosY1 = 70

def start():
  global PosX1
  PosX1 += 1

fenetre = Tk()

canvas = Canvas(fenetre, width=700, height=500, background='white')
ligne1 = canvas.create_line(30, 30, 30, 470)
ligne2_1 = canvas.create_line(30, 30, 320, 30)
ligne2_2 = canvas.create_line(380, 30, 670, 30)
ligne3 = canvas.create_line(670, 30, 670, 470)
ligne4 = canvas.create_line(30, 470, 670, 470)

boule1 = canvas.create_oval(PosX1, PosY1, PosX1+20, PosY1+20, fill='black')

canvas.pack()

start()

fenetre.mainloop()
0
yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 1 568
5 sept. 2021 à 20:57
est-ce ton premier exercice en python?
ajoute un print() dans start(), pour comprendre ce qui se passe.
commence peut-être par des exercices plus simples, sans tkinter, pour comprendre comment se comporte un programme que tu écris.
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 6 sept. 2021 à 10:02
Bonjour,

Effectivement, tu débute vraiment en programmation (tkinter ou pas)

Dans ton code, tu défini une fenêtre, tu y crée un Canvas pour pouvoir y dessiner des lignes et un cercle rempli en noir

Ensuite tu appelles une fonction start() qui incrémente la valeur de PosX1

Et c'est tout !

Ce n'est pas de la magie: le fait de changer cette variable ne va pas déplacer le cercle
Comme le dit yg_be: "je ne vois rien dans ton programme qui "déplace" la boule."
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Oui mais la boule dans la fenetre est créer en fonction de la variable PosX1 le fait d'incrémenter cette variable ne devrait pas créer a chaque fois une nouvelle boule légère décalé et donner l'impression qu'elle se déplace ?
L'instruction fenetre.mainloop() ne permet-elle pas de remonter a la ligne fenetre = Tk() ?
0
D'accord, le problème venait du fait que je pensais que mainloop permettait d'exécuter de nouveau toutes les lignes de code. Je vais me renseigner pour trouver.
Merci beaucoup
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 6 sept. 2021 à 21:15
OK, mais réfléchis quand même à ce qui se passe:

même en rejouant une fois tout le code, on redessinerait une 2eme boule noire 1 pixel plus loin

en X sans effacer la 1ere ...

On se retrouverait donc avec 2 boules mais pas de mouvement
0