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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 99
    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 : 387
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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    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 très actif
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 99
    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 confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 211
    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

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    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 confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 211
    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 : 327
Taille : 16,0 Ko

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    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

+ 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, 00h36
  2. Réponses: 1
    Dernier message: 09/10/2010, 11h37
  3. Création d'une winform avec menu
    Par MkcookieFIFO dans le forum Windows Forms
    Réponses: 22
    Dernier message: 30/03/2010, 16h42
  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, 15h58
  5. Réponses: 4
    Dernier message: 19/07/2009, 13h51

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