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):
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
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 voici le résultat :
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):
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,
Partager