IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

architecture MVC et tkinter [Python 3.X]


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Points : 3
    Points
    3
    Par défaut architecture MVC et tkinter
    Bonjour! je suis en L1 info et notre enseignant nous a demander de modifier un programme que nous avions initialement fait sur un fichier en 3 fichier (IHM,contrôleur,donnée) et je bloque.Pour faire simple j'ai crée un Canvas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    from donnée import*
    from ihm import*
    from tkinter import* 
     
    def jeu():
        root=Tk()
        crv=Canvas (root, width=l, height=haut, background="ivory")
        crv.bind("<Button-1>", cliq)
        crv.pack()
        crv.bind("<Button-3>", pos)
        crv.pack()
        root.mainloop()
    Or la partie "graphique" ici la création d'un damier dois se trouver dans ihm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    from tkinter import*
     
     
    #taille du canvas plateau
    l=700
    haut=700
    side = 10
    carr=l/side
    fff=0.05*(l/side)    
     
     
    def tabl(partie):
     
     
        for k in range(side):
            for f in range(side):
                if (partie[k][f]==0 or partie[k][f]=="b" or partie[k][f]=="n"):
                    crv.create_rectangle(f*carr,k*carr,(f+1)*carr,(k+1)*carr, fill="black", outline="white")
                else:
                    crv.create_rectangle(f*carr,k*carr,(f+1)*carr,(k+1)*carr, fill="white", outline="black")
     
     
     
    def dess(x,i,j):
     
        crv.create_oval(j*carr+fff,i*carr+fff,(j+1)*carr-fff,(i+1)*carr-fff, fill=x)
    Mais comme on peut pas faire d'import croiser donc crv n'est pas reconnu dans ihm j'ai essayer plein de truc genre des "returns" , mettres des "globals" de partouts mais sa ne marche pas
    Merci d'avance et excuser le manque de clarté dans ma question

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 355
    Points : 36 883
    Points
    36 883
    Par défaut
    Salut,

    C'est quoi le sujet MVC?

    Pour l'instant vous avez un canvas stocké dans une variable locale de la fonction jeu qui ne va pas se téléporter par magie comme variable locale d'une autre fonction (qu'elle soit dans un autre module ou pas).

    Ok. C'est difficile d'absorber autant de concepts qui entrent en collision, donc vous vous mélangez les pinceaux... mais c'est pas grave prenez le temps de réfléchir pour arriver à séparer les différentes abstractions que vous titillez et comment les composer....
    Avec un peu d'obstination vous allez y arriver!

    - W

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Points : 3
    Points
    3
    Par défaut mvc
    enfaite je n'est pas montré tout mon programme pour que cela soit plus compréhensible car j'ai tendance a faire mes programmes sont très brouillons mais je vais mettre l’entière ter si-dessous (en gros l'architecture mvc c'est parce que on nous demande d'écrire un programme en 3 partie qui communique entre elle comme ceci):
    controlleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    from donnée import*
    from ihm import*
    from tkinter import* 
     
    def cliq(event):
        xi=event.x
        yi=event.y
        col=round(xi//(l/side))
        lign=round(yi//(haut/side))
        print(lign,col)
     
        return lign,col
     
    def pos(event):
        xi=event.x
        yi=event.y
        col2=round(xi//(l/side))
        lign2=round(yi//(haut/side))
     
        return lign2,col2
     
    def jeu():
     
        root=Tk()
        crv=Canvas (root, width=l, height=haut, background="ivory")
        crv.bind("<Button-1>", cliq)
        crv.pack()
        crv.bind("<Button-3>", pos)
        crv.pack()
        root.mainloop()
     
     
     
     
     
     
    def start():
        jeu()
        tabl(matrice())
        maj(matrice())
     
     
    start()
    donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    from ihm import*
     
    #matrice plateau vierge:
     
     
    blanc = 1
    noir = 0
     
     
    tdq="bl"#defini c'est le tour de qui bl=blanc no=noir
     
     
     
    def maj(x):
        for i in range(side):
            for j in range(side):
                if (x[i][j]=="b"):
                    dess("ivory3",i,j)
                if (x[i][j]=="n"):
                    dess("saddle brown",i,j)
                if (x[i][j]=="rn"):
                    dess("red",i,j)
                if(x[i][j]=="rb"):
                    dess("green",i,j)
     
    def matrice():
     
        partie=[]
     
        cpt=1
        for i in range (side):
            lign=[]
            for j in range(round(side)):
                if (cpt==0):
                    lign.append(noir)
                    cpt=cpt+1
                else:
                    lign.append(blanc)
                    cpt=cpt-1
            partie.append(lign)
            if (cpt==0):
                cpt=cpt+1
            else:
                cpt=cpt-1
     
     
        for i in range (4):
            for j in range(side):
                if (partie[i][j]==0):
                    partie[i][j]="b"
     
        for i in range (6,10):
            for j in range(side):
                if (partie[i][j]==0):
     
                    partie[i][j]="n"
        return partie
    ihm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    from tkinter import*
     
     
    #taille du canvas plateau
    l=700
    haut=700
    side = 10
    carr=l/side
    fff=0.05*(l/side)    
     
     
    def tabl(partie):
        global root
     
        for k in range(side):
            for f in range(side):
                if (partie[k][f]==0 or partie[k][f]=="b" or partie[k][f]=="n"):
                    crv.create_rectangle(f*carr,k*carr,(f+1)*carr,(k+1)*carr, fill="black", outline="white")
                else:
                    crv.create_rectangle(f*carr,k*carr,(f+1)*carr,(k+1)*carr, fill="white", outline="black")
     
     
     
    def dess(x,i,j):
     
        crv.create_oval(j*carr+fff,i*carr+fff,(j+1)*carr-fff,(i+1)*carr-fff, fill=x)

    Je pense aussi qu'avec du temps je pourrais trouver une solution mais j'ai été abandonner par mes coéquipiers et j'ai beaucoup de travail et je manque de temps (notre profs est très/trop exigent )

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par angrygolin Voir le message
    (IHM,contrôleur,donnée) et je bloque.
    On a l'impression que MVC c'est triangulaire avec chaque partie qui tape dans les deux autres mais en réalité c'est plutôt hiérarchique. La vue (IHM) chapeaute le tout et c'est elle qui fait appel au contrôleur quand il faut traiter la donnée ou au modèle quand il faut la récupérer ou la stocker. Et c'est l'action de l'utilisateur sur les boutons/fenêtres qui lance les différentes actions.

    Citation Envoyé par angrygolin Voir le message
    Mais comme on peut pas faire d'import croiser donc crv n'est pas reconnu dans ihm j'ai essayer plein de truc genre des "returns" , mettres des "globals" de partouts mais sa ne marche pas
    Oui enfin Python ce n'est pas une marmite de potion magique dans laquelle on met des instructions au hasard. Il faut "organiser" ses actions. Déjà la création du damier ça reste de l'IHM donc ça doit se trouver dans l'IHM. Ensuite si tu veux créer le damier dans une fonction à part et que cette fonction doit "connaitre" une quelconque variable "crv" créée dans la fenêtre principale Tk, alors il faut que ce soit la fenêtre Tk qui appelle cette fonction en lui passant ce fameux "crv" en paramètre.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Ok merci pour la rapidité des réponses je vais essayer de réorganiser tout ça!

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Désoler je revient a la charge mais je suis toujours bloquer sur le même problème il dois me manquer une info essentiel car je ne voit vraiment pas de solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    from Beta import*
    from tkinter import*
     
     
    root = Tk()
    crv=Canvas (root, width=100, height=100, background="ivory")
    root.mainloop()
     
    exemple(crv)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    from tkinter import*
    (mon code marche pas) j'ai _tkinter.TclError: invalid command name ".!canvas"
     
     
    def exemple(a):
     
        a.create_rectangle(0,0,50,50, fill="black")

    crv est bien mis en paramètre ? mon code marche pas :_tkinter.TclError: invalid command name ".!canvas"

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 355
    Points : 36 883
    Points
    36 883
    Par défaut
    Salut,

    exemple(crv) ne peut s'exécuter qu'après la sortie de l'appel à root.mainloop() (puisque c'est l'instruction qui vient après).

    Et pour sortir de mainloop soit çà exécute .quit soit on a cliqué sur la croix pour détruire la fenêtre principale. Ce faisant tous les widgets ont été détruit et on obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _tkinter.TclError: invalid command name ".!canvas"
    parce que le canvas n'existe plus.

    Visiblement, il vous manque des bases pour faire l'exo. et ces bases, c'est pas une discussion qui va vous permettre de les acquérir mais un temps non négligeable à passer dans des tutos. (ou à revoir votre cours).

    - W

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Ah oui merci beaucoup j'ai modifier le placement de mainloop() et sa marche.Helas c'est pas un exo mais un projet a rendre pr dans 1 semaine mais c'est noté je vais chercher des tutos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. architecture mvc etxml/xsl
    Par kiko2005 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 14/08/2009, 14h52
  2. Architecture MVC & C++ Builder ?
    Par zi_omnislasher dans le forum C++Builder
    Réponses: 5
    Dernier message: 14/12/2006, 23h24
  3. Utiliser une architecture MVC
    Par misterniark dans le forum MVC
    Réponses: 5
    Dernier message: 03/11/2006, 22h35
  4. [Spring MVC] Architecture MVC dans spring
    Par Alec6 dans le forum Spring Web
    Réponses: 4
    Dernier message: 11/10/2006, 12h35
  5. Architecture MVC
    Par Bobleponge dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 20/06/2005, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo