1 pièce(s) jointe(s)
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:
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:
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 : Pièce jointe 659038
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,