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 : 365
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,