Problèmes inattendus avec tkinter !

Percysledge Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut à tous. J'ai ici le code d'un programme en python avec un canva tkinter ,ce programme est censé affiché une ligne parallèle à la précédente quand j'appuie le bouton 'New line' et changer la couleur de la ligne suivante quand j'appui sur le bouton 'Change color'...enfin vous comprendrez le code je crois ! Mais quand j'appuie sur mon bouton 'New line' rien ne passe dans la fenêtre et j'ai une erreur dans la console...
Voici l'erreur et le code plus bas. Votre aide me serai très utiles . Merci :)


Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "C:/Users/PC/PycharmProjects/pythonProject/test1/UnCaneva.py", line 10, in draw_lines
    canvas1.create_line(x1, y1, x2, y2, width=2, fill=col)
NameError: name 'x1' is not defined



# coding:utf-8
from tkinter import *
from random import randrange



def draw_lines():
    """Drawing of a line in canvas1"""
    global x1, x2, y1, y2, col
    canvas1.create_line(x1, y1, x2, y2, width=2, fill=col)
    # modification of coordinate for next line
    y1, y2 = y1 + 10, y2 + 10


def change_col():
    """random modification of line color"""
    global col
    color = ["blue", "white", "green", "red", "orange", "purple", "cyan", "maroon", "yellow"]
    i = randrange(len(color))
    col = color[i]


# widget principal
draw_frame = Tk()

# widgets du widget principal
canvas1 = Canvas(draw_frame, bg="black", height=500, width=500)
canvas1.pack(side=LEFT)
button_quit = Button(draw_frame, text="Quit", command=draw_frame.quit)
button_quit.pack(side=BOTTOM)
button_draw_lines = Button(draw_frame, text="New line", command=draw_lines)
button_draw_lines.pack()
button_change_color = Button(draw_frame, text="Change color", command=change_col)
button_change_color.pack()
draw_frame.mainloop()
#draw_frame.destroy()

# __________ Main program _____________

# this variable will be use global
x1, y1, x2, y2 = 0, 0, 0, 0
col = "dark green"






Configuration: Windows / Edge 88.0.705.68

1 réponse

jee pee Messages postés 41520 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
Bonjour,

Et si tu mettais les lignes 41 et 42 avant de lancer la fenetre graphique, en 21.
0
Percysledge Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai essayé mais ça fonctionne pas, ça fait plus rien, juste la fenêtre qui se crée ça ne renvoie plus d'erreur mais ça fait rien en cliquant sur les boutons
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Percysledge Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
as-tu compris à quoi servaient les variables x2 et y2?
0
Percysledge Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Ce sont les coordonnées du deuxième point de la ligne
0
Percysledge Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Oui...je viens d'essayer et ça fonctionne désormais à merveille, j'avais mis les lignes en 21 mais le problème était maintenant dans les coordonnées de mes points (0,0,0,0) qui étaient confondues
0
Percysledge Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Ahhh oui....je vois où tu veux en venir...j'ai changé les coordonnées de x2 et y2 afin qu'elles soient plus confondues avec celles de x1 et y1
0