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 :

Creation d'une interface avec Menu : problème de placement de mes widget [Python 2.X]


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 96
    Points : 61
    Points
    61
    Par défaut Creation d'une interface avec Menu : problème de placement de mes widget
    Bonjour,

    je suis en train d'essayer de faire une interface afin de lancer des playbook ansible de manière plus aisée qu'en ligne de commande.

    Pour se faire je suis partir avec Tkinter avec un Menu dans lequel on choisira les playbook à lancer ou bien ajouter des nouveaux playbook récemment créer.

    J'arrive a faire afficher mes frames en fonction du menu mais les widget ne s'affiche pas comme je le souhaiterai.

    Voici mon code :

    main.py (fichier principal):

    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
     
    #!/usr/bin/python2.7
    # -*- coding: utf-8 -*-
    import Tkinter as tk
    import sys, os, subprocess, json
    from Tkinter import Menu
    import ttk
    from launcher2 import *
     
     
    #Application principale
    class MainApp():
     
        def __init__(self,root=None):
            #Titre de l'application
            self.root=root
            self.version = "1.0.0"
            self.root.title("Playbook Launcher v"+self.version)
            self.root.geometry("1200x950")
     
            #Barre de menu
            menubar = tk.Menu(self.root)
            self.root.config(menu=menubar)
     
            playbook_menu = tk.Menu(menubar, tearoff=0)
            playbook_menu.add_command(label='Copier fichier',command=self.copy_script_frame)
            playbook_menu.add_command(label='Redémarrage contexte',command=root.destroy)
            playbook_menu.add_command(label='Redémarrage dans l\'ordre',command=root.destroy)
     
            ajout_menu = tk.Menu(menubar, tearoff=0)
            ajout_menu.add_command(label='Ajout playbook')
            ajout_menu.add_command(label='Mise à jour inventaire')
     
            menubar.add_cascade(label="Playbooks",menu=playbook_menu)
            menubar.add_cascade(label="Ajouts")
     
            #Frame principale
            self.frame = tk.Frame(self.root)
            tk.Label(self.frame, text="Bienvenu sur le lanceur de playbook").pack()
     
            #paramétrage des frame secondaire
            self.copy_script= CopyScript(master=self.root,app=self)
     
     
     
        def main(self):
            self.frame.pack()
     
        def copy_script_frame(self):
            self.frame.pack_forget()
            self.copy_script.start()
     
     
    if __name__ == "__main__":
        root = tk.Tk()
        app = MainApp(root)
     
        root.mainloop()
    et mon fichier launcher2.py dans lequel je mets ce qui concerne les lancement des playbooks:

    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
     
    #!/usr/bin/python2.7
    # -*- coding: utf-8 -*-
    import Tkinter as tk
    import sys, os, subprocess, json
    from Tkinter import Menu
    import ttk
     
    class CopyScript():
        def __init__(self,master=None,app=None):
            #on parametre les attributs principaux
            self.master = master
            self.app = app
            #on va aller chercher le fichier en base apres
            #on met en place la frame principale
            self.main_frame = ttk.Frame(self.master)
     
            #listbox pour les inventaires
            self.frame_inventaire = ttk.Frame(self.main_frame)
            inventaire_label = ttk.Label(self.frame_inventaire,text="Inventaire :")
            inventaire_label.pack()
            inventaire_scroll= ttk.Scrollbar(self.frame_inventaire, orient=tk.VERTICAL)
            self.inventaire_listbox = tk.Listbox(self.frame_inventaire, yscrollcommand=inventaire_scroll.set,width=20,height=2)
            inventaire_scroll.config(command=self.inventaire_listbox.yview)
            inventaire_scroll.pack()
     
            self.inventaire_listbox.insert(tk.END,"Test")
            self.inventaire_listbox.insert(tk.END,"Test2")
     
     
            self.inventaire_listbox.pack()
            self.frame_inventaire.pack()
            self.frame_param = ttk.Frame(self.main_frame)
            host_input_label = ttk.Label(self.frame_param,text="Host cible: ")
            self.host_input = ttk.Entry(self.frame_param)
            host_input_label.pack()
            self.host_input.pack()
            self.file_input = ttk.Entry(self.frame_param)
            file_selection_label = ttk.Label(self.frame_param,text="Fichier cible: ")
     
            file_selection_label.pack()
     
            file_selection_label.pack()
            self.file_input.pack()
     
            self.frame_param.pack()
     
            self.textbox = tk.Text(self.main_frame, width=300, height=300,state='disabled')
            self.textbox.see(tk.END)
            self.textbox.pack()
     
        def start(self):
            self.main_frame.pack()
     
        # def main_page(self):
    et voici le résultat : Nom : gui_1.png
Affichages : 198
Taille : 12,3 Ko

    Les 3 widgets du haut se placent en colonne et non sur une ligne ... j'ai chercher les options sur le pack, place et quand j'essaye grid ca tourne en rond sur la machine.

    Si quelqu'un peut m'expliquer comment faire pour que cela fonctionne ca serait super gentil ! Merci d'avance,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 445
    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 445
    Points : 37 038
    Points
    37 038
    Par défaut
    C'est bien de montrer ce que vous avez fait mais en écrivant:

    Citation Envoyé par Bensljul Voir le message
    mon souci est que je n'arrive pas a placer les widget qui me permet de choisir des parametre sur une seule ligne ... j'ai chercher les options sur le pack, place et quand j'essaye grid ca tourne en rond sur la machine.
    vous exprimez un besoin: "placer les widget qui me permet de choisir des parametre sur une seule ligne" sans montrer ce que vous attendez.

    Pour le reste, pack et grid demandent du temps pour apprendre à les utiliser. La version 2.7 de python est obsolète. Pire elle vient avec une version de Tk ancienne. Travaillez avec des versions plus récentes!

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

  3. #3
    Membre du Club
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 96
    Points : 61
    Points
    61
    Par défaut
    Ah j'aimerai bien pouvoir avoir une version plus récente de python ^^ mais sur la machine en question c'est pas possible ^^

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 105
    Points : 9 602
    Points
    9 602
    Par défaut
    Hello,
    Citation Envoyé par Bensljul Voir le message
    Ah j'aimerai bien pouvoir avoir une version plus récente de python ^^ mais sur la machine en question c'est pas possible ^^
    C'est quel type de machine (O.S)? Pour quelle raison ce n'est pas possible ?
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

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

    Citation Envoyé par Bensljul Voir le message
    Ah j'aimerai bien pouvoir avoir une version plus récente de python ^^ mais sur la machine en question c'est pas possible ^^
    Dans ce cas, ce n'est pas une machine sur laquelle vous allez pouvoir apprendre... et éventuellement écrire une petite application "fonctionnelle" démontrant que vous êtes capable de profiter de ce que vous avez appris.

    Lorsque votre code fonctionnera, le faire fonctionner sur la machine que vous ne pouvez pas mettre à jour sera un autre sujet.

    Accessoirement, vous n'avez pas répondu à ma question: "montrer ce que vous attendez".

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

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 105
    Points : 9 602
    Points
    9 602
    Par défaut
    Normalement la version de Tcl/Tk actuelle sous python 3 est la 8.6.X et c'est aussi une version 8.6 avec python 2.7 (la 8.6 initiale est sortie en 2012).
    Tu peux essayer ceci pour ton gui ( testé avec python 3) :
    Code python : 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
    class CopyScript():
        def __init__(self,master=None,app=None):
            #on parametre les attributs principaux
            self.master = master
            self.app = app
            #on va aller chercher le fichier en base apres
            #on met en place la frame principale
            self.main_frame = ttk.Frame(self.master)
     
            #listbox pour les inventaires
            self.frame_inventaire = ttk.Frame(self.main_frame)
            inventaire_label = ttk.Label(self.frame_inventaire,text="Inventaire :")
            inventaire_label.grid(row= 0,column = 0)
            inventaire_scroll= ttk.Scrollbar(self.frame_inventaire, orient=tk.VERTICAL)
            self.inventaire_listbox = tk.Listbox(self.frame_inventaire, yscrollcommand=inventaire_scroll.set,width=20,height=2)
            inventaire_scroll.config(command=self.inventaire_listbox.yview)
            inventaire_scroll.grid(row= 0,column = 1)
     
            self.inventaire_listbox.insert(tk.END,"Test")
            self.inventaire_listbox.insert(tk.END,"Test2")
     
            self.inventaire_listbox.grid(row= 0,column = 2)
            self.frame_inventaire.pack()
            self.frame_param = ttk.Frame(self.main_frame)
            host_input_label = ttk.Label(self.frame_param,text="Host cible: ")
            self.host_input = ttk.Entry(self.frame_param)
            host_input_label.grid(row= 0,column = 0)
            self.host_input.grid(row= 1,column = 0)
            self.file_input = ttk.Entry(self.frame_param)
            file_selection_label = ttk.Label(self.frame_param,text="Fichier cible: ")
     
            file_selection_label.grid(row= 0,column = 1)
            self.file_input.grid(row= 1,column = 1)
     
            self.frame_param.pack()
     
            self.textbox = tk.Text(self.main_frame, width=300, height=300,state='disabled')
            self.textbox.see(tk.END)
            self.textbox.pack()
     
        def start(self):
            self.main_frame.pack()
    j'utilise le grid

    voici ce que cela donne :
    Nom : tkinterGrid.png
Affichages : 130
Taille : 16,0 Ko
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 445
    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 445
    Points : 37 038
    Points
    37 038
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Normalement la version de Tcl/Tk actuelle sous python 3 est la 8.6.X et c'est aussi une version 8.6 avec python 2.7 (la 8.6 initiale est sortie en 2012).
    Le release notes de la 2.7-18 dit que TCL/tk livré avec à la version 8.5.
    Ce qu'on peut aisément vérifier via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import Tkinter as tk
    >>> tk.TkVersion
    8.5
    >>>
    Ceci dit côté Tk, il n'y a pas de grande différence (lorsqu'on débute)... mais tant que le PO n'a pas dit ce qu'il veut.

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

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 105
    Points : 9 602
    Points
    9 602
    Par défaut
    Hello,
    Citation Envoyé par wiztricks Voir le message
    Le release notes de la 2.7-18 dit que TCL/tk livré avec à la version 8.5.
    Ce qu'on peut aisément vérifier via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import Tkinter as tk
    >>> tk.TkVersion
    8.5
    >>>
    C'est bizarre moi sous Lubuntu 22 voici ce que j'obtiens :
    Python 2.7.18 (default, Oct 15 2023, 16:43:11)
    [GCC 11.4.0] on linux2
    Type "help", "copyright", "credits" or "license()" for more information.
    >>> import Tkinter
    >>> Tkinter.TclVersion
    8.6
    >>> Tkinter.TkVersion
    8.6
    >>>
    sachant que j'ai installé python-2 avec des paquets Lubuntu.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 445
    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 445
    Points : 37 038
    Points
    37 038
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    sachant que j'ai installé python-2 avec des paquets Lubuntu.
    Ce n'est pas ce que dit le release notes et sur Windows où le Tcl/TK utilisé est livré avec l'installation c'est le cas.
    Après sous Linux, les développeurs de la distro. se permettent de "repackager" (peut être pour éviter d'avoir n versions pour rien).
    La vraie question sera de savoir qui embêter lorsque ça ne marche pas: python va botter en touche, TCL/tk demandera du code Tcl, quand à l'équipe Linux elle n'aura pas d'assurance dont si on ne reproduit pas dans les dernières versions, ça va pas beaucoup bosser.

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

  10. #10
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 105
    Points : 9 602
    Points
    9 602
    Par défaut
    Hello,
    Citation Envoyé par wiztricks Voir le message
    Ce n'est pas ce que dit le release notes et sur Windows où le Tcl/TK utilisé est livré avec l'installation c'est le cas.
    sous windows , j'utilise Thonny installé avec son python. Voici ce que cela me donne pour tkinter :
    Python 3.10.11 (D:\Logiciels\Thonny\python.exe)
    >>> import tkinter
    >>> tkinter.TclVersion
    8.6
    >>> tkinter.TkVersion
    8.6
    >>>
    Nom : Thonny.png
Affichages : 102
Taille : 4,5 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 445
    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 445
    Points : 37 038
    Points
    37 038
    Par défaut
    Une version 8.6 de Tcl/Tk livrée avec une v3.n de Python est "normal" (c'est ce que vous montrez avec l'exemple sous thonny).
    Ce qui ne va pas c'est une 8.6 sur Python 2.7.

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

  12. #12
    Membre du Club
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 96
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    Désolé je n'ai pas eu le temps de revenir vers vous étant en congé.

    Du coup j'ai un peu changer ma manière de faire.

    déjà j'ai changer ma facon d'appeler mes frame a partir du fichier main.py :

    main.py:
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #!/usr/bin/python2.7
    # -*- coding: utf-8 -*-
    import Tkinter as tk
    import sys, os, subprocess, json
    from Tkinter import Menu
    import ttk
    #import des classe frame
    from classes_tkinter.launcher import *
     
    #Application principale
    class MainApp(tk.Tk):
     
        def __init__(self):
            #Titre de l'application
            tk.Tk.__init__(self)
            self.version = "1.0.0"
            self.title("Playbook Launcher v"+self.version)
            self.geometry("1200x950")
     
            #On fait le menu
            self.init_menu()
     
            #On paramètre les frames
            self.container = tk.Frame(self)
            self.container.pack(fill="both", expand=True)
            #listes des frames
            self.frames = {}
     
            for f in (CopyScript,Reboot):
                name = f.__name__
                frame = f(parent=self.container, controller=self)
                self.frames[name] = frame
                frame.grid(row=0,column=0,sticky="nsew")
     
            self.show_frame("CopyScript")
     
        def init_menu(self):
            menubar = Menu(self)
     
            #Menu pour lancer des Playbook
            menu_playbook = Menu(menubar,tearoff=0)
            menu_playbook.add_command(label="Copier fichier",command=lambda: self.show_frame(page_name="CopyScript"))
            menu_playbook.add_command(label="Redémarrage",command=lambda: self.show_frame(page_name="Reboot"))
     
            #Menu pour faire des ajouts
            menu_ajout = Menu(menubar,tearoff=0)
            menu_ajout.add_command(label="Ajout playbook")
            menu_ajout.add_command(label="Ajout host")
     
            #Menu pour voir les informations stockées en base
            menu_consult = Menu(menubar,tearoff=0)
            menu_consult.add_command(label="Playbook")
            menu_consult.add_command(label="Inventory")
     
            #Ajout dans le menu
            menubar.add_cascade(label="Lanceur Playbook",menu=menu_playbook)
            menubar.add_cascade(label="Ajouts",menu=menu_ajout)
            menubar.add_cascade(label="Consultation",menu=menu_consult)
     
            #Ajout dans l'application
            self.config(menu=menubar)
     
        def show_frame(self,page_name):
            frame = self.frames[page_name]
            frame.tkraise()
     
    if __name__ == "__main__":
        MainApp().mainloop()
    dans launcher.py:

    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
     
    #!/usr/bin/python2.7
    # -*- coding: utf-8 -*-
    import Tkinter as tk
    import sys, os, subprocess, json
    import ttk
     
    class CopyScript(tk.Frame):
        def __init__(self,parent,controller):
            tk.Frame.__init__(self,parent)
            self.controller = controller
            self.label =  ttk.Label(self ,text="Copier fichier")
            self.label.grid(row=1,column=5)
            # self.label.place(relx=.9,rely=.01,width=100,height=25)
     
    class Reboot(tk.Frame):
        def __init__(self,parent,controller):
            tk.Frame.__init__(self,parent)
            self.controller = controller
            self.label =  ttk.Label(self ,text="Redémarrage")
            self.label.grid(row=1,column=3)
    Ca fonctionne plutôt bien mais par contre je ne peux pas placer les widget des frame de launcher.py comme je veux càd par exemple le CopyScript est a grid : row = 1 et column =5 mais il est tout à gauche dans ma fenêtre
    Est ce du au frame.grid qui est dans le main.py ?
    Nom : gui_tkinter.png
Affichages : 67
Taille : 7,2 Ko

    et ma version de tkinter sur mon python2.7 est la version 8.5

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 445
    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 445
    Points : 37 038
    Points
    37 038
    Par défaut
    Citation Envoyé par Bensljul Voir le message
    par exemple le CopyScript est a grid : row = 1 et column =5 mais il est tout à gauche dans ma fenêtre
    Est ce du au frame.grid qui est dans le main.py ?
    Pas la peine de taper des dizaines de lignes de code pour voir que grid place la colonne n°5 en première position si rien n'occupe les colonnes 1, 2, 3, 4,...
    Prendre le temps de lire la documentation et de tester pour vérifier que ca fonctionne comme vous l'avez compris n'est pas une option...

    Et comme pour la première question, il y a plein de façon de faire... mais il faut déjà commencer par décrire ce qu'on veut plutôt que de constater que ce que vous avez fait ne fonctionne pas.


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

  14. #14
    Membre du Club
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 96
    Points : 61
    Points
    61
    Par défaut
    Alors j'avais déjà regarder la documentation et je ne vois pas où ca parle que si rien n'occupe les colonne 1 a 4 ca se mets en 1ere position déjà :
    -column n
    Insert the window so that it occupies the nth column in the grid. Column numbers start with 0. If this option is not supplied, then the window is arranged just to the right of previous window specified on this call to grid, or column “0” if it is the first window. For each x that immediately precedes the window, the column position is incremented by one. Thus the x represents a blank column for this row in the grid.
    et ce que je veux c'est placer le label "Copier Fichier" de manière centrée dans ma grille (du moins pas tout à gauche pour le moment) c'est pas bien compliqué a comprendre non plus

  15. #15
    Membre du Club
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 96
    Points : 61
    Points
    61
    Par défaut
    c'est bon j'ai trouvé .. fallait juste me dire de regarde le padx pour rajouter un margin.

    Merci à toi jurassic pork d'avoir essayer de m'aider

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 445
    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 445
    Points : 37 038
    Points
    37 038
    Par défaut
    Citation Envoyé par Bensljul Voir le message
    Alors j'avais déjà regarder la documentation et je ne vois pas où ca parle que si rien n'occupe les colonne 1 a 4 ca se mets en 1ere position déjà
    Lire la documentation, c'est écrire de petits exemples qui illustrent ce qu'on en a compris et produisent ce qu'on souhaite.
    On peut par exemple écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import tkinter as tk
     
    root = tk.Tk()
    for i in range(5, 0, -1):
        tk.Label(root, text=str(i)*i).grid(row=0, column=i)
        root.update()
        root.after(500)
    for i in range(6):
        tk.Label(root, text=str(i)*(5-i)).grid(row=1, column=i)
    tk.mainloop()
    et constater que:
    • grid va (par défaut) placer le widget à la colonne N en fonction de la place occupée par les widgets placés dans les n-1 colonnes précédentes => rien ou des widgets de dimension nulle, ça fait une longueur 0...
    • grid va (par défaut) dimensionner la largeur de chaque colonne en fonction du widget qui occupera la plus grande largeur dans la colonne.4


    Citation Envoyé par Bensljul Voir le message
    et ce que je veux c'est placer le label "Copier Fichier" de manière centrée dans ma grille (du moins pas tout à gauche pour le moment) c'est pas bien compliqué a comprendre non plus
    Vous êtes supposé chercher un peu sur Internet et y trouver des exemples comme celui-ci.

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

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

Discussions similaires

  1. Création d'une interface avec Qt
    Par lucciana dans le forum Débuter
    Réponses: 2
    Dernier message: 08/02/2011, 01h36
  2. Réponses: 1
    Dernier message: 09/10/2010, 12h37
  3. Création d'une winform avec menu
    Par MkcookieFIFO dans le forum Windows Forms
    Réponses: 22
    Dernier message: 30/03/2010, 17h42
  4. Comment faire pour une interface avec un menu ribbon ? sans onglet
    Par Yogy dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 20/01/2010, 16h58
  5. Réponses: 4
    Dernier message: 19/07/2009, 14h51

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