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 :

Insérer un cadre pour regrouper des widgets


Sujet :

Tkinter Python

  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Insérer un cadre pour regrouper des widgets
    Bonjour tout le monde,

    J'utilise Python 2.6 avec Wing IDE personnal.

    Je dois créer une interface graphique qui ressemblera à celle-ci :



    J'aimerais créer un cadre qui regrouperait différents widgets.

    C'est plus "esthétique" que fonctionnel (je pense).

    J'ai tenté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self.separator = Frame(height=2, bd=1, relief=SUNKEN)
    self.separator.pack(fill=X, padx=5, pady=5)
    Sans succès.

    Quand je lance l'application, le form ne s'affiche pas.

    Je me demandais donc comment afficher plusieurs widgets dans un frame et y mettre un titre à ce widget (sur l'image c'est "Experiment")


    Voici mon code :


    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
    from Tkinter import *
     
    class Simple_app_tk(Tk):
        def __init__(self, parent):
            Tk.__init__(self, parent)
            self.parent=parent
        def initialize(self):
            self.grid
            self.labelMicro = Label(self.parent, text="MIC 1", font=("Helvetica", 20)) #attention : text est une propriété de Label mais Text (grand T) est une classe
            self.labelMicro.grid(column=0, row=0, sticky='EW') #placement d'une zone de texte à la colonne 0 et à la ligne 0
     
     
            self.separator = Frame(height=2, bd=1, relief=SUNKEN)
            self.separator.pack(fill=X, padx=5, pady=5)
     
     
     
     
    if __name__=="__main__":
        app=Simple_app_tk(None)
        app.title('Ma fenetre')
        app.initialize()
        app.mainloop()
    Tant qu'on y est, savez-vous comment s'appelle le widget avec les deux flèches et la valeur numérique ? (delay(s)) ?

    Merci d'avance pour votre aide.

    beegees

  2. #2
    Membre confirmé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Par défaut
    bon pour commencer il faut éviter de mélanger les .pack() avec les .grid() ou les .place() sinon sa ne s'affiche pas

    aussi quand tu écrit : au début de la class la fenetre qui va s'afficher sera vide. il faut donc l'écrire en derniere ligne et aussi il ne faut pas oublier les "()" ^^

    sinon je croit que j'ai compris ce que tu voulais faire alors j'ai fais un petit exemple rapidement

    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
     
    import Tkinter
     
    class panneau2(Tkinter.Frame):
        def __init__(self, parent):
            Tkinter.Frame.__init__(self, borderwidth = 5, padx = 5, pady = 5, relief = Tkinter.SUNKEN)
     
            # ajout des bouttons de test
            Tkinter.Button(self, text = "boutton1").grid(row = 1, column = 1)
            Tkinter.Button(self, text = "boutton1").grid(row = 2, column = 1)
            Tkinter.Button(self, text = "boutton3").grid(row = 3, column = 1)
            self.grid()
     
    class panneau1(Tkinter.Frame):
        def __init__(self, parent):
            Tkinter.Frame.__init__(self, borderwidth = 5, padx = 5, pady = 5, relief = Tkinter.GROOVE)
     
            # ajout des label de test 
            Tkinter.Label(self, text = " boutton 1 ==> ", font = "{MS Sans Serif} 12").grid(row = 1, column = 1)
            Tkinter.Label(self, text = " boutton 2 ==> ", font = "{MS Sans Serif} 12").grid(row = 2, column = 1)
            Tkinter.Label(self, text = " boutton 3 ==> ", font = "{MS Sans Serif} 12").grid(row = 3, column = 1)
            self.grid()
     
    class interface1(Tkinter.Frame):
        def __init__(self):
            Tkinter.Frame.__init__(self)
     
            # ajout du premier panneau
            self.panneauNumero1 = panneau1(self)
            self.panneauNumero1.grid(row = 2, column = 1)
     
            # ajout du second panneau
            self.panneauNumero2 = panneau2(self)
            self.panneauNumero2.grid(row = 2, column = 2)
     
            self.grid()
     
    if __name__=='__main__':
        App_Interface = interface1()
        App_Interface.mainloop()
    voila en espérant avoir répondut a t'est question.

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Salut,

    Un super grand merci pour ta réponse et tes conseils.

    bon pour commencer il faut éviter de mélanger les .pack() avec les .grid() ou les .place() sinon sa ne s'affiche pas.
    OK, j'en prends note, désolé mais je suis débutant.

    aussi quand tu écrit : au début de la class la fenetre qui va s'afficher sera vide. il faut donc l'écrire en derniere ligne et aussi il ne faut pas oublier les "()" ^^
    OK, merci pour l'info.

    sinon je croit que j'ai compris ce que tu voulais faire alors j'ai fais un petit exemple rapidement
    Merci pour l'exemple, il va beaucoup me servir, je vais m'en inspirer pour faire le reste de mon formulaire.

    Quelques questions sur ton code :

    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if __name__=='__main__':
        App_Interface = interface1()
    On crée donc un objet nommé App_Interface de type interface1

    Ce que je ne comprends pas, c'est qu'arrivé dans la class interface1, la classe prend un paramètre Tkinter.Frame.

    On ne doit pas normalement envoyer le paramètre en créant l'objet ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    App_Interface = interface1()
    2

    J'ai modifié un de tes widget afin d'utiliser un widget de type "Entry" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Tkinter.Entry(self, text = " 240 ", font = "{MS Sans Serif} 12").grid(row = 2, column = 2)
    J'obtiens bien une zone de texte mais j'aimerais aussi avoir une valeur par défaut.

    Je pensais que text = " 240 " m'aurait permis d'obtenir ce résultat mais sans succès.

    3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Tkinter.Button(self, text = "boutton1").grid(row = 3, column = 1)
    Tkinter.Button(self, text = "boutton1").grid(row = 4, column = 1)
    Tkinter.Button(self, text = "boutton3").grid(row = 5, column = 1)
    Ces boutons apparaissent à droite de ma première frame mais j'aurais voulu qu'ils apparaissent en dessous du premier frame, comment faire stp ?

    4

    Comment mettre un titre au frame ?

    beegees

  4. #4
    Membre confirmé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Par défaut
    1

    j'ai pas compris

    2
    pour commencer, si tu veut intérargir avec tes widgets dans la suite de t'on programme il faut que tu les enregistre dans des variables.

    pour mettre un text dans un Entry ou dans un Text, il faut utiliser la fonction insert

    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    self.entry = Tkinter.Entry(self, width = 20, font = "{MS Sans Serif} 10")
    self.entry.insert(Tkinter.END, "240")
    self.entry.grid( ... )
    3

    pour faire un bon positionnement de tes objets dans ton interface, il faut que voit ta fenetre comme une grille. a chaque croissement de ligne/colone tu peut mettre un objet. donc il faut que au minimum tu renseigne le numero de la ligne et le numero de la colone pour positionner ton objets

    les bouttons sont "fabriquer" dans la class panneau2. donc pour les afficher dans t'on interface tu appele cette class et tu la grid au bon endroit

    ici, pour la placer sous les Label il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # ajout du second panneau
            self.panneauNumero2 = panneau2(self)
            self.panneauNumero2.grid(row = 3, column = 1)
    4

    pour ajouter un titre a ta fenetre, il te faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class interface1(Tkinter.Frame):
        def __init__(self):
            Tkinter.Frame.__init__(self)
            self.master.title(" mon titre :)")          # <-- normalement 
    
            # ajout du premier panneau


    voila. j'espere avoir correctement répondut. et je suis content de t'avoir aider

  5. #5
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Bonsoir,

    je crois qu'il y a également les LabelFrame qui intègrent une zone de message
    et que ce qui a été utilisé dans ton image.

    voici un petit code!
    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
    #coding:latin1
    from Tkinter import Button,LabelFrame,Tk
     
    cpt = 0
    def f():
        global cpt
        cpt+=1
        if cpt%2==0:
            root.title('Action 1 en cours')
        else:
            root.title('Action 2 Effectuée')
    root = Tk()
    root.title("Essai de goupe")
    frm = LabelFrame(root,text='Options',)
    frm.pack(padx=5,pady=8)
    Button(frm,text='Actionner',command=f,width=32).pack()
    Button(frm,text='Quitter',command=root.destroy,width=32).pack()
     
    root.mainloop()
    @+ et bon code
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  6. #6
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Salut à vous deux,

    Un tout grand merci pour vos réponses, sincèrement, cela m'aide beaucoup.

    Vous avez une méthode différente pour travailler (POO pour rezuz et procédural pour afranck64

    @rezuz (la réponse pour afranck64 est plus bas) :

    pour commencer, si tu veut intérargir avec tes widgets dans la suite de t'on programme il faut que tu les enregistre dans des variables.
    Bon à savoir, merci.

    pour mettre un text dans un Entry ou dans un Text, il faut utiliser la fonction insert
    Bien noté aussi, merci.

    C'est quoi ce END ?

    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    self.entry = Tkinter.Entry(self, width = 20, font = "{MS Sans Serif} 10")
    self.entry.insert(Tkinter.END, "240")
    self.entry.grid( ... )

    pour faire un bon positionnement de tes objets dans ton interface, il faut que voit ta fenetre comme une grille. a chaque croissement de ligne/colone tu peut mettre un objet. donc il faut que au minimum tu renseigne le numero de la ligne et le numero de la colone pour positionner ton objets

    les bouttons sont "fabriquer" dans la class panneau2. donc pour les afficher dans t'on interface tu appele cette class et tu la grid au bon endroit
    OK, pour ce qui est du placement des objets, je dois m'entraîner.

    ici, pour la placer sous les Label il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # ajout du second panneau
            self.panneauNumero2 = panneau2(self)
            self.panneauNumero2.grid(row = 3, column = 1)
    Voici ce que ça me donne :

    http://164.15.112.38/rezuz.jpg

    4

    pour ajouter un titre a ta fenetre, il te faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class interface1(Tkinter.Frame):
        def __init__(self):
            Tkinter.Frame.__init__(self)
            self.master.title(" mon titre :)")          # <-- normalement 
    
            # ajout du premier panneau
    Pas de titre.

    Voici quand même mon code :

    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
    import Tkinter
     
    class panneau2(Tkinter.Frame):
        def __init__(self, parent):
            Tkinter.Frame.__init__(self, borderwidth = 5, padx = 5, pady = 5, relief = Tkinter.SUNKEN)
     
            # ajout des bouttons de test
            Tkinter.Button(self, text = "boutton1").grid(row = 3, column = 1)
            Tkinter.Button(self, text = "boutton1").grid(row = 3, column = 1)
            Tkinter.Button(self, text = "boutton3").grid(row = 3, column = 1)
            self.grid()
     
    class panneau1(Tkinter.Frame):
        def __init__(self, parent): #constructeur de la classe panneau1
            Tkinter.Frame.__init__(self, borderwidth = 5, padx = 5, pady = 5, relief = Tkinter.GROOVE) #constructeur de la classe Tkinter
     
            # ajout des label de test 
            Tkinter.Entry(self, text = "", font = "{MS Sans Serif} 12").grid(row = 1, column = 1) #Entry est un widget qui permet d'entrer du texte dans une zone de texte
            Tkinter.Label(self, text = " delay(s) ", font = "{MS Sans Serif} 12").grid(row = 2, column = 1)
            self.entry = Tkinter.Entry(self, font = "{MS Sans Serif} 12")
            self.entry.insert(Tkinter.END, "240")
            self.grid() #nécessaire pour faire apparaître l'application sur la fenêtre
     
    class interface1(Tkinter.Frame):
        def __init__(self): #constructeur de la classe interface1
            Tkinter.Frame.__init__(self)
     
     
            # ajout du premier panneau
            self.panneauNumero1 = panneau1(self) #on crée un objet qui s'appelle panneauNumero1 de type panneau1
            self.panneauNumero1.grid(row = 2, column = 1) #on affiche l'objet avec grid (attention de ne pas mélanger grid, pack...)
     
            # ajout du second panneau
            self.panneauNumero2 = panneau2(self)
            self.panneauNumero2.grid(row = 2, column = 2)
     
            self.grid()
     
    if __name__=='__main__':
        App_Interface = interface1() #on crée un objet de type interface1
        App_Interface.mainloop() #on lance le boucle qui va attendre un évènement



    voila. j'espere avoir correctement répondut. et je suis content de t'avoir aider
    [/QUOTE]

    Oui, j'apprécie énormément ton aide et tes conseils.

    Merci
    beegees


    [quote=afranck64;5410599]Bonsoir,

    je crois qu'il y a également les LabelFrame qui intègrent une zone de message
    et que ce qui a été utilisé dans ton image.
    ça me semble pas mal en effet

    voici un petit code!
    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
    #coding:latin1
    from Tkinter import Button,LabelFrame,Tk
     
    cpt = 0
    def f():
        global cpt
        cpt+=1
        if cpt%2==0:
            root.title('Action 1 en cours')
        else:
            root.title('Action 2 Effectuée')
    root = Tk()
    root.title("Essai de goupe")
    frm = LabelFrame(root,text='Options',)
    frm.pack(padx=5,pady=8)
    Button(frm,text='Actionner',command=f,width=32).pack()
    Button(frm,text='Quitter',command=root.destroy,width=32).pack()
     
    root.mainloop()
    J'ai testé ton code, ça fonctionne bien aussi.

    Je vais essayer de mélanger les deux pour arriver à quelque chose.

    Merci pour l'aide, c'est très sympa.


    beegees

  7. #7
    Membre confirmé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Par défaut
    le Tkinter.END c'est la position de t'on text dans l'entry. si tu écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.entry.insert(0.0, "plop"
    plop sera au début de l'entry si il y quelque chose avant. tu peut ainsi donner la possition de ce que tu veut ajouter.

    eu je voit pas trop pourquoi sa donne sa. tu a bien visualiser ta grille parce que moi sa marche trés bien. regarde avec mon code.
    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
     
    import Tkinter
     
    class panneau2(Tkinter.Frame):
        def __init__(self, parent):
            Tkinter.Frame.__init__(self, borderwidth = 5, padx = 5, pady = 5, relief = Tkinter.SUNKEN)
     
            # ajout des bouttons de test
            Tkinter.Button(self, text = "boutton1").grid(row = 1, column = 1)
            Tkinter.Button(self, text = "boutton1").grid(row = 2, column = 1)
            Tkinter.Button(self, text = "boutton3").grid(row = 3, column = 1)
            self.grid()
     
    class panneau1(Tkinter.Frame):
        def __init__(self, parent):
            Tkinter.Frame.__init__(self, borderwidth = 5, padx = 5, pady = 5, relief = Tkinter.GROOVE)
     
            # ajout des label de test 
            Tkinter.Label(self, text = " boutton 1 ==> ", font = "{MS Sans Serif} 12").grid(row = 1, column = 1)
            Tkinter.Label(self, text = " boutton 2 ==> ", font = "{MS Sans Serif} 12").grid(row = 2, column = 1)
            Tkinter.Label(self, text = " boutton 3 ==> ", font = "{MS Sans Serif} 12").grid(row = 3, column = 1)
            self.grid()
     
    class interface1(Tkinter.Frame):
        def __init__(self):
            Tkinter.Frame.__init__(self)
            self.master.title("test interface avec panneaux")
     
            # ajout du premier panneau
            self.panneauNumero1 = panneau1(self)
            self.panneauNumero1.grid(row = 1, column = 1)
     
            # ajout du second panneau
            self.panneauNumero2 = panneau2(self)
            self.panneauNumero2.grid(row = 2, column = 1)
     
            self.grid()
     
    if __name__=='__main__':
        App_Interface = interface1()
        App_Interface.mainloop()
    je me permet aussi de faire quelque remarque a t'on code : (rajouter sous forme de commentaire violet)
    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
    import Tkinter
     
    class panneau2(Tkinter.Frame):
        def __init__(self, parent):
            Tkinter.Frame.__init__(self, borderwidth = 5, padx = 5, pady = 5, relief = Tkinter.SUNKEN)
            
            # ajout des bouttons de test
            Tkinter.Button(self, text = "boutton1").grid(row = 3, column = 1) ###
            Tkinter.Button(self, text = "boutton1").grid(row = 3, column = 1) # attention a tes boutton. la ils sont tous sur la même ligne. si tu ne veut qu'un boutton, suprimme les deux autres 
            Tkinter.Button(self, text = "boutton3").grid(row = 3, column = 1) ###
            self.grid()
            
    class panneau1(Tkinter.Frame):
        def __init__(self, parent): #constructeur de la classe panneau1
            Tkinter.Frame.__init__(self, borderwidth = 5, padx = 5, pady = 5, relief = Tkinter.GROOVE) #constructeur de la classe Tkinter
            
            # ajout des label de test 
            Tkinter.Entry(self, text = "", font = "{MS Sans Serif} 12").grid(row = 1, column = 1) #Entry est un widget qui permet d'entrer du texte dans une zone de texte
    # tu as déja un entry qui est configurer plus bas. dans lequel tu as ta valeur par defaut/ il te suffit de le placer avec .grid
            Tkinter.Label(self, text = " delay(s) ", font = "{MS Sans Serif} 12").grid(row = 2, column = 1)
            self.entry = Tkinter.Entry(self, font = "{MS Sans Serif} 12")
            self.entry.insert(Tkinter.END, "240")
            [COLOR="rgb(153, 50, 204)"]self.entry.grid( ... )[/COLOR]
            self.grid() #nécessaire pour faire apparaître l'application sur la fenêtre
            
    class interface1(Tkinter.Frame):
        def __init__(self): #constructeur de la classe interface1
            Tkinter.Frame.__init__(self)
            
     
            # ajout du premier panneau
            self.panneauNumero1 = panneau1(self) #on crée un objet qui s'appelle panneauNumero1 de type panneau1
            self.panneauNumero1.grid(row = 2, column = 1) #on affiche l'objet avec grid (attention de ne pas mélanger grid, pack...)
            
            # ajout du second panneau
            self.panneauNumero2 = panneau2(self)
            self.panneauNumero2.grid(row = 2, column = 2)
            
    # si tu regarde bien. ici tu place les deux panneaux sur la même ligne mais avec des colone different. c'est normal qu'il soit cote a cote. mes leur une ligne diferent mais la même colone
            self.grid()
            
    if __name__=='__main__':
        App_Interface = interface1() #on crée un objet de type interface1
        App_Interface.mainloop()
    # tu ne créé pas d'objet. tu les apelle. tu les créé lorsque tu écrit :
    class ...(...):
    ...
    ...


    PS : je tient a m'escuser avec les fautes d'orthographe

  8. #8
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Bonjour,

    Pour ton code...
    En fait le grid s'utilise comme une matrice c'est à dire chaque widget est positionné avec un unique couplet (row,column)/(ligne,colonne) dans un widget parent. En gros avec les commentaires de rezuz voici ce que j'obtient.

    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
    # -*- coding: cp1252 -*-
    import Tkinter
     
    class panneau2(Tkinter.Frame):
        def __init__(self, parent):
            Tkinter.Frame.__init__(self, borderwidth = 5, padx = 5, pady = 5, relief = Tkinter.SUNKEN)
     
            # ajout des bouttons de test
            # Chaque case doit avoir des coordonnées uniques! pour le même containeur
            Tkinter.Button(self, text = "boutton1").grid(row = 1, column = 1)
            Tkinter.Button(self, text = "boutton2").grid(row = 2, column = 1)
            Tkinter.Button(self, text = "boutton3").grid(row = 3, column = 1)
            self.grid()
     
    class panneau1(Tkinter.Frame):
        def __init__(self, parent): #constructeur de la classe panneau1
            Tkinter.Frame.__init__(self, borderwidth = 5, padx = 5, pady = 5, relief = Tkinter.GROOVE) #constructeur de la classe Tkinter
     
            # ajout des label de test 
            Tkinter.Label(self, text = " delay(s) ", font = "{MS Sans Serif} 12").grid(row = 1, column = 1)
            self.entry = Tkinter.Entry(self, font = "{MS Sans Serif} 12",width=8)
            self.entry.insert(Tkinter.END, "240")
            self.entry.grid(row=2,column=1)
            self.grid(row=1,column=2) #nécessaire pour faire apparaître l'application sur la fenêtre
     
    class interface1(Tkinter.Frame):
        def __init__(self): #constructeur de la classe interface1
            Tkinter.Frame.__init__(self)
     
     
            # ajout du premier panneau
            self.panneauNumero1 = panneau1(self) #on crée un objet qui s'appelle panneauNumero1 de type panneau1
            self.panneauNumero1.grid(row = 2, column = 1) #on affiche l'objet avec grid (attention de ne pas mélanger grid, pack...)
     
            # ajout du second panneau
            self.panneauNumero2 = panneau2(self)
            self.panneauNumero2.grid(row = 2, column = 2)
     
            self.grid()
     
    if __name__=='__main__':
        App_Interface = interface1() #on crée un objet de type interface1
        App_Interface.mainloop() #on lance le boucle qui va attendre un évènement
    Et pour l'histoire de pack, grid et place en fait c'est dans un widget donné qu'on ne doit pas les mélanger; donc peut faire un truc du genre.
    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
    #coding:latin1
    from Tkinter import Tk,LabelFrame,Button
     
    root = Tk()
    root.title('méthodes de placement')
     
    frm1 = LabelFrame(root,text='package',width=16)
    frm2 = LabelFrame(root,text='gridage',width=16)
    #place marche certainnement aussi mais je n'ai
    #pas l'habitude de l'utiliser!
     
    frm1.pack(side='left')
    frm2.pack(side='right')
     
    Button(frm1,text='pack1').pack()
    Button(frm1,text='pack2').pack()
     
    #on met en diagonale pour ressortir l'aspect matriciel
    Button(frm2,text='grid1').grid(row=1,column=1)
    Button(frm2,text='grid2').grid(row=2,column=2)
     
     
    root.mainloop()
    @+ et bon code
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  9. #9
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Pas de pythonnerie a ajouter vous etes trop avancer pour moi mais une petite suggestion vu que tu bosse sur windows la prochaine fois évite la photo un peu flou: Utilse un freeware de capture d'écran comme:
    -Captimag
    -Capture d'écran
    -Easy Capture
    etc...
    Ou le Snipping Tool inclus dans Windows que tu trouvera sous \accessoires\capture écran.

Discussions similaires

  1. Algorithme pour regrouper des nombres (combinaisons ?)
    Par Fabricer66 dans le forum Intelligence artificielle
    Réponses: 10
    Dernier message: 12/06/2009, 13h37
  2. [Toutes versions] problème pour regrouper des valeurs de cellules tout en respectant l'ordre
    Par songs_of_liberty dans le forum Excel
    Réponses: 5
    Dernier message: 16/04/2009, 18h43
  3. Réponses: 4
    Dernier message: 19/10/2008, 20h07
  4. [Macro] macro pour regrouper des tables
    Par melomanu dans le forum Macro
    Réponses: 5
    Dernier message: 16/10/2008, 17h05
  5. Utilisation de Regex pour regrouper des emails
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/02/2008, 16h51

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