Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

AttributeError: 'module' object has no attribute 'root' [fermés]

0 votes

je ne comprends pas où est l'erreur =/

voici ma "lib" :

import tkinter as tk
import mainproj_fork_test as main

def create_root():
    """ creer la fenêtre principale"""
    root = tk.Tk()
    root.title('entrelaceur')
    return root

def create_canvas(root):
    """ creer la zone de dessin qui va contenir l'entrelacs ainsi que le quadrillage"""
    mycanvas = tk.Canvas(root, bg ='white')
    return mycanvas

def create_button_draw(root):
    BoutonDraw = tk.Button(root, text = 'draw', command=create_noeuds)
    return BoutonDraw

def create_button_delete(root, my_canvas):
    BoutonDelete = tk.Button(root, text = 'delete', command = lambda:my_canvas.delete(tk.ALL))
    return BoutonDelete

def create_button_quitter(root):
    BoutonOut = tk.Button(main.root,text="Sortir",command=root.destroy)
    return BoutonOut

def create_all_buttons(root, my_canvas, h, l):
    """ Créer et pack les boutons : Draw permettant de dessiner les noeuds, Delete permettant de supprimer le quadrillage, Sortir permettant de détruire la fenetre principale"""
    BoutonDraw = create_button_draw(root)
    BoutonDraw.pack()

    BoutonDelete = create_button_delete(root, my_canvas)
    BoutonDelete.pack()

    BoutonOut = create_button_quitter(root)
    BoutonOut.pack()

    return (BoutonDraw,BoutonDelete, BoutonOut)

def create_noeuds():
    create_noeuds1()
    create_noeuds2()

def create_noeuds1():
    """ Crée un quadrillage de noeuds en fonction de sa dimension ligne/colonne """
    h = main.hauteur_entry.get()
    l = main.largeur_entry.get()
    i, j = 0, 0 
    x0,y0,x1,y1 = 30, 30 , 50 ,50
    # création du quadrillage de dimension ligne, colonne 
    cpt = 0 
    while i < int(l)-1 :
        cpt = 0
        while j < int(h)-1 :
            main.my_canvas.create_oval(x0,y0,x1,y1, fill = 'black', tag=("mur",cpt))
            x0 ,x1 = x0 + 60 , x1 + 60
            j = j + 1
            cpt = cpt + 1
        j = 0
        i = i + 1
        y0, y1 = y0 + 60, y1 + 60
        x0, x1 = 30, 50

def create_noeuds2():
    """ Crée le quadrillage sur lequel on basera le mur """ 
    h = main.hauteur_entry.get()
    l = main.largeur_entry.get()
    i, j = 0, 0
    x0,y0,x1,y1 = 0, 0, 20, 20
    cpt = 0 
    while i < int(l):
        while j < int(h):
            main.my_canvas.create_oval(x0,y0,x1,y1, fill = 'red', tag=("cadre",cpt))
            x0, x1 = x0 + 60, x1 + 60
            j = j+1
            cpt = cpt + 1
        j = 0
        i = i+1
        y0, y1 = y0 + 60, y1 + 60
        x0, x1 = 0, 20

def callback(event):
    items = main.my_canvas.find_withtag("current")
    tag = main.my_canvas.gettags(items)
    main.txtvar = tag
    coord = main.my_canvas.coords(tag)
    print(main.txtvar, coord)

def create_matrice(ligne, colonne):
    n=[0]*ligne
    m=[0]*colonne
    l=[n,m]
    print(l)

voici mon main :

import tkinter as tk
import libui_fork_test as ui

# initialisations
# Par défaut, la hauteur et la largeur du qadrillage est 2x2
h,l = 2,2 
current_coord = 0
txtvar = ""

def mymain():
    # fenêtre principale
    root = ui.create_root()

    # zone graphique
    my_canvas = ui.create_canvas(root)
    my_canvas.pack(side = tk.LEFT) 

    # configuration des bouttons

    ui.create_all_buttons(root,my_canvas,h,l)

    # configuration des entrées hauteur/largeur du quadrillage

    hauteur_label = tk.Label(root, text = 'hauteur')
    hauteur_label.pack()
    hauteur_entry = tk.Entry(root)
    hauteur_entry.pack() 


    largeur_label = tk.Label(root, text = 'largeur')
    largeur_label.pack()
    largeur_entry = tk.Entry(root)
    largeur_entry.pack() 

    # gestion evt clic gauche
    my_canvas.bind('<Button-1>',ui.callback)

    return my_canvas, root, hauteur_label, hauteur_entry, largeur_label, largeur_entry

if __name__=="__main__":
    my_canvas, root, hauteur_label, hauteur_entry, largeur_label, largeur_entry = mymain()

à l'execution :

python3 mainproj_fork_test.py 
Traceback (most recent call last):
  File "mainproj_fork_test.py", line 41, in <module>
    my_canvas, root, hauteur_label, hauteur_entry, largeur_label, largeur_entry = mymain()
  File "mainproj_fork_test.py", line 20, in mymain
    ui.create_all_buttons(root,my_canvas,h,l)
  File "/home/boblinux/Documents/projet/proj_IHM/last_version/libui_fork_test.py", line 35, in create_all_buttons
    BoutonOut = create_button_quitter(root)
  File "/home/boblinux/Documents/projet/proj_IHM/last_version/libui_fork_test.py", line 24, in create_button_quitter
    BoutonOut = tk.Button(main.root,text="Sortir",command=root.destroy)
AttributeError: 'module' object has no attribute 'root'
fermée avec la mention: Fixed, simple probleme de nommage ...
demandé 24-Mar-2015 par boblinux (3,092 points)
remontrée 1-Avr-2015 par boblinux
...