• [^] # Re: Code

    Posté par . En réponse au message Affichage simultané de plusieurs fenêtres filles.. Évalué à 2. Dernière modification le 27 juin 2016 à 19:10.

    J'utilise Python ver 3.3.4 et tkinter comme librairie graphique.
    Je travaille sous Mac OSX El Capitan
    Le programme est encours d'écriture et je n'ai pas fait encore toutes les fonctions.
    Au passage qques autres petits problèmes:

    • pas moyen de modifier l'aspect des boutons : les paramètres bg, fg, relief etc ne semblent pas être pris en compte ?
    • pas moyen de créer une classe de type Menu:le menu ,bien que correctement scripté, ne s'affiche pas.

    Le module ppal s'appelle EssaiClasses.py (essai parce que je suis débutant) et voici le script:

    from tkinter import *
    import sqlite3
    import sys
    from tkinter.messagebox import *
    class Application(Tk): # crée la fenêtre ppale avec le menu
     def __init__(self,parent):
     Tk.__init__(self,parent)
     self.parent=parent
     self.initialize()
     self.title("Utilisation et posologie des molécules 'bizarres'")
     larg=self.winfo_screenwidth()
     haut=self.winfo_screenheight()
     self.geometry("{}x{}+{}+{}".format(larg,haut,0,0))
     self.resizable(width=True,height=True)
     self.config(bg="light blue")
     mBar=MenuBar(self)
     mBar.pack()
     def initialize(self):
     pass
    class FenetreVoirSupUnite(Toplevel): #premiere fenêtre fille
     def __init__(self,boss,**Arguments):
     Toplevel.__init__(self,boss,**Arguments)
     self.title("Voir les unités ou les voies d'administration")
     self.geometry("550x200+400+300")
     self.Cadre=Frame(self,bg='light green',relief=RAISED,border=2)
     self.Cadre.pack(side=LEFT,padx=5,pady=5)
     self.CadreListe=Frame(self,bg='light green',relief=RAISED,border=2)
     self.CadreListe.pack(side=RIGHT,padx=5,pady=5)
     self.FichListe=Listbox(self.CadreListe,bg='light green',fg='blue',relief=SUNKEN)
     self.FichListe.pack(padx=5,pady=5)
     self.CadreBou=Frame(self,bg='light green',relief=RAISED,border=2)
     self.CadreBou.pack(side=BOTTOM,pady=10)
     self.val=['A','B','C']
     self.etiq=['Unité du principe actif ','Unité de posologie '," Voie d'administration"]
     self.vargr=StringVar()
     self.vargr.set(self.val[1])
     for i in range(3):
     b=Radiobutton(self.Cadre,variable=self.vargr,text=self.etiq[i],value=self.val[i],bg='light green',command=self.ChoixBouton).pack(side=TOP)
     self.bou=Button(self.CadreBou,text="Supprimer",relief=GROOVE,command=self.Supprimer)
     self.bou.pack(side=BOTTOM,padx=5,pady=5)
     def ChoixBouton(self):
     print(self.vargr.get())
     self.FichListe.delete(0,END)
     if self.vargr.get()=='A':
     nomfich='UnitProduit'
     elif self.vargr.get()=='B':
     nomfich='UnitPoso'
     else:
     nomfich='VoieAdmin'
     print(nomfich) # permet de voir si ça marche
     self.FichListe.focus_set() 
     def Supprimer(self): #fonction pas encore écrite 
     print("C'est fait !!!") 
    class FenetreAjoutUnite(Toplevel): # deuxième fenêtre fille
     def __init__(self,boss,**Arguments):
     Toplevel.__init__(self,boss,**Arguments)
     self.title("Ajout d'une unité ou d'une voie d'administration")
     self.geometry("550x200+400+300")
     self.Cadre=Frame(self,bg='light green',relief=RAISED,border=2)
     self.Cadre.pack(padx=5,pady=20)
     self.val=['A','B','C']
     self.etiq=['Unité du principe actif ','Unité de posologie '," Voie d'administration"]
     self.vargr=StringVar()
     self.vargr.set(self.val[1])
     for i in range(3):
     b=Radiobutton(self.Cadre,variable=self.vargr,text=self.etiq[i],value=self.val[i],bg='light green',command=self.ChoixBouton).pack(side=LEFT)
     self.enonce=Label(self,text="Nouvelle unité : ",bg="light green",fg="blue")
     self.enonce.pack(fill=X)
     self.entree=Entry(self,width=15,bg="light yellow",relief="groove")
     self.entree.pack(padx=50, pady=10)
     self.entree.focus_set()
     self.bou=Button(self,text="Enregistrer",relief="groove",command=self.ajoute)
     self.bou.pack(side=BOTTOM,pady=10)
     def ChoixBouton(self):
     print(self.vargr.get())
     def ajoute(self):
     if self.entree.get()=="":
     if askyesno("vous n'avez rien saisi !","Recommencer ?")==False:
     self.destroy()
     else:
     if self.vargr.get()=='A':
     nomfichier='UnitProduit'
     print(nomfichier)
     elif self.vargr.get()=='B':
     nomfichier='UnitPoso'
     print(nomfichier) # permet de voir si ça marche
     else:
     nomfichier='VoieAdmin'
     print(nomfichier) # permet de voir si ça marche
    class MenuBar(Frame):
     def __init__(self,boss=None):
     Frame.__init__(self,borderwidth=10,bg='light yellow')
     fileMenu=Menubutton(self,text="Molécules",bg='yellow')
     fileMenu.pack(side=LEFT)
     me1=Menu(fileMenu)
     me1.add_command(label='Nouvelle',underline=2,command=boss.quit)
     me1.add_command(label='Voir-Modifier',underline=3,command=boss.quit)
     me1.add_command(label='Effacer',underline=1,command=boss.quit)
     me1.add_command(label='Quitter',underline=1,command=boss.quit)
     fileMenu.configure(menu=me1)
     self.esp=Menubutton(self,text='Espèces',bg='red')
     self.esp.pack(side=LEFT,padx='6')
     me1=Menu(self.esp)
     me1.add_command(label='Nouvelle',command=boss.quit)
     me1.add_command(label='Voir-Modifier',command=boss.quit)
     me1.add_command(label='Supprimer',command=boss.quit)
     self.esp.configure(menu=me1)
     self.Unit=Menubutton(self,text="Unités/Voie d'administration",bg='green')
     self.Unit.pack(side=LEFT,padx='6')
     me1=Menu(self.Unit)
     me1.add_command(label="Nouvelle unité",command=self.ajouteUnite) 
     me1.add_command(label='Voir-Supprimer',command=self.voirUnite)
     self.Unit.configure(menu=me1) 
     self.Calcul=Menubutton(self,text='Calcul',bg='blue')
     self.Calcul.pack(side=LEFT,padx='6')
     me1=Menu(self.Calcul)
     me1.add_command(label='Nouveau calcul',command=boss.quit)
     self.Calcul.configure(menu=me1) 
     def ajouteUnite(self): # appel d'une fenêtre fille mais efface la fenêtre fille déjà affichée : je veux les 2 !!!!!!
     fen=FenetreAjoutUnite(app,bg="light green")
     def voirUnite(self): # appel d'une autre fenêtre fille mais efface la fenêtre fille déjà affichée : je veux les 2 !!!!!!
     fenVoir=FenetreVoirSupUnite(app,bg="light green") 
    if __name__=="__main__":
     app=Application(None)
     app.mainloop()