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

Tkinter Python Discussion :

python tkinter problème de Canvas, Frame


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai Avatar de eponge
    Homme Profil pro
    chomeur
    Inscrit en
    Février 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Février 2017
    Messages : 76
    Points : 12
    Points
    12
    Par défaut python tkinter problème de Canvas, Frame
    bonjour je teste depuis un moment de faire une application avec plusieurs 'panneaux' et quand j'utilise (je fais du rangement quoi) Canvas ou Frame les buttons, label et autres composants, liés à ces deux widgets, migrent sur le panneau principal (bien rangés c'est vrai) les uns sur les autres. l'un de vous aurait-il une solution et même une explication ? ah une chose j'ai tenté ce programme en replaçant Canvas par Frame et j'obtines les mêmes résultats
    voici le programme:
    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
    import tkinter
    class principal:
        def prems():
            test=tkinter.Tk()
            tkinter.Label(test, text= 'tentative').grid(row=0,column=0)
            cont=tkinter.Frame(test,bg='green',height=50,width=200).grid(row=1,column=0,columnspan=3)
            tkinter.Label(cont, text='ca marche!!').grid(row=1,column=0)
            #tkinter.Button(cont, text='second',command=secondaire.deuz).grid(row=1, column=2)
            tkinter.Button(cont,text='quitter', command=test.destroy).grid(row=1,column=1)
     
    class secondaire:
        def deuz():
            bistest=tkinter.Tk()
            cont1=tkinter.Frame(bistest,bg='red',height=50,width=200).grid(row=0,rowspan=2,column=0)
            tkinter.Label(cont1,text='test').grid(row=0,column=0)
            tkinter.Button(cont1,text='quitter',command=bistest.destroy).grid(row=1,column=0)
            tkinter.Label(bistest,text='et la ?').grid(row=0,column=2)
     
    test=principal
    test.prems()
    detest=secondaire
    detest.deuz()
    zut il ne prends pas les indentations! je mets des parentheses pour rendre les choses plus claires
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Si je dois déjà éditer votre code pour y ajouter des appels à mainloop...
    Je ne verrais sans doute pas le soucis dont vous essayez de parler.

    De plus, si vous débutez, vous n'avez pas de bonnes raisons d'avoir deux appels tkinter.Tk() dans votre programme. Avec tkinter vous avez 3 sortes de fenêtres: celle fabriquée par Tk qui est la fenêtre principale, des éventuels Toplevel - les fenêtres secondaires , et des Frame qui vont contenir d'autres widgets.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai Avatar de eponge
    Homme Profil pro
    chomeur
    Inscrit en
    Février 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Février 2017
    Messages : 76
    Points : 12
    Points
    12
    Par défaut
    je ne vois pas le rapport avec mainloop, vu que le problème se pose [B]avant[B] toute animation, dans l'organisation 'structurelle' du panneau. j'ai d'autres programmes qui souffrent du même handicap que ça soit avec tk() ou l'autre(et que mainloop soit présent ou même after, voir rien) ça ne change rien. la première fenêtre créée se retrouve automatiquement avec tous les widgets 'contenu' dans frame ou canvas. je me suis demandé si le programme ne faisait pas une 'confusion' entre différents maîtres pour les liens.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par eponge Voir le message
    je ne vois pas le rapport avec mainloop, vu que le problème se pose [B]avant[B] toute animation, dans l'organisation 'structurelle' du panneau. j'ai d'autres programmes qui souffrent du même handicap que ça soit avec tk()
    S'il n'y a pas de "mainloop", le programme sort sans que rien n'ait été affiché. Et s'il n'y a rien à voir, pas de problème...
    Après vous n'êtes pas supposé avoir deux appels à Tk() dans le même programme.
    Puis, lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       a = Frame(...).grid(...)
       b = Label(a, ...)
    "a" contient None car .grid(...) retourne None.... et le master sera, par défaut, la fenêtre principale.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai Avatar de eponge
    Homme Profil pro
    chomeur
    Inscrit en
    Février 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Février 2017
    Messages : 76
    Points : 12
    Points
    12
    Par défaut
    donc si je comprends bien pour faire plusieurs 'panneaux' j'utilise un seul Tk() et Top level() ensuite et pour le grid je doit indiquer le master dedans. mais normalement c'est pas dans la déclaration du module que je dois le mettre ? ou je l'ajoute aussi dans grid ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par eponge Voir le message
    donc si je comprends bien pour faire plusieurs 'panneaux' j'utilise un seul Tk() et Top level() ensuite et pour le grid je doit indiquer le master dedans. mais normalement c'est pas dans la déclaration du module que je dois le mettre ? ou je l'ajoute aussi dans grid ?
    Je ne comprends pas de quoi vous parlez: c'est quoi la déclaration d'un module?
    Au cas où il suffit d'écrire:
    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
    import tkinter as tk
     
    test = tk.Tk()
    tk.Label(test, text= 'tentative').grid(row=0,column=0)
    w=tk.Frame(test,bg='green',height=50,width=200)
    w.grid(row=1,column=0,columnspan=3)
    tk.Label(w, text='ca marche!!').grid(row=1,column=0)
    tk.Button(w,text='quitter', command=test.destroy).grid(row=1,column=1)
     
    bistest = tk.Toplevel()
    w = tk.Frame(bistest,bg='red',height=50,width=200)
    w.grid(row=0,rowspan=2,column=0)
    tk.Label(w,text='test').grid(row=0,column=0)
    tk.Button(w,text='quitter',command=bistest.destroy).grid(row=1,column=0)
    tk.Label(bistest,text='et la ?').grid(row=0,column=2)
     
    tk.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai Avatar de eponge
    Homme Profil pro
    chomeur
    Inscrit en
    Février 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Février 2017
    Messages : 76
    Points : 12
    Points
    12
    Par défaut
    hum je pense où est mon erreur merci de votre aide

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

Discussions similaires

  1. [python 3] Problème avec cx_freeze et tkinter
    Par bvrignaud dans le forum Déploiement/Installation
    Réponses: 5
    Dernier message: 09/11/2016, 08h07
  2. Réponses: 1
    Dernier message: 11/03/2016, 08h26
  3. [Python 3.X] Problème Python + Tkinter
    Par sylyako dans le forum Général Python
    Réponses: 1
    Dernier message: 10/05/2015, 13h37
  4. [Tkinter] Problème Canvas
    Par KingKyser dans le forum Tkinter
    Réponses: 4
    Dernier message: 30/04/2015, 12h21
  5. Réponses: 1
    Dernier message: 24/05/2014, 13h18

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