Bienvenue sur IndexError.

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

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

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
...