| 12
 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
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 
 | import tkinter
import tkinter.filedialog as tkFileDialog
import tkinter.ttk as ttk
import sys
 
class Fichier_menu():
    """ Gestion des actions du menu déroulant de fichier"""
 
    def __init__(self, parent, onglet, fenetre):
        """ Installation des sous-menus - Parent est la barre de menu principale et fenetre, la fenêtre associée"""
        self.mp = parent
        self.fe = fenetre
        self.ong = onglet
        self.menu_fichier = tkinter.Menu(self.mp, tearoff=0)
        self.mp.add_cascade(menu=self.menu_fichier,
                            label = "Fichier", underline =0)
        self.menu_fichier.add_command(label="Nouveau",accelerator="Ctrl+N",
                                      underline=0, font=('Comic Sans MS', 10),
                                      command=self.nouvelle_feuille)
        self.menu_fichier.add_command(label="Ouvrir", accelerator="Ctrl+O",
                                      underline=0, font=('Comic Sans MS', 10),
                                      command=self.ouverture_fichier)
        self.menu_fichier.add_command(label="Quitter", accelerator="Ctrl+Q",
                                      underline=0, command=self.fermer_tout,
                                      font=('Comic Sans MS', 10))
        self.menu_fichier.add_separator()        
 
    def _new_sheet(self, nom_fichier):
        """création d'une nouvelle feuille"""
        f1 = tkinter.Frame(self.ong, bg='gray', bd=1)
        s1 = tkinter.Scrollbar(f1, orient=tkinter.VERTICAL)
        texte1 = tkinter.Text(f1, wrap=tkinter.WORD)
        s1.config(command=texte1.yview)
        texte1.config(yscrollcommand=s1.set, font=('courier', 10),
                           background='white', foreground='black',
                           insertbackground='black',
                      )
        texte1.grid(column=0, row=0)
        s1.grid(column=1, row=0, sticky=tkinter.S+tkinter.N)
        self.ong.add(f1, text=nom_fichier)
        self.ong.select(self.ong.index('end')-1)
        texte1.focus_set()
        return texte1, self.ong.select()
 
    def nouvelle_feuille(self, event=None):
        """création d'une feuille vide"""
        texte, sheet = self._new_sheet('nouveau')
        self.fe.feuilles[sheet] = ['nouveau', texte]
 
    def ouverture_fichier(self, event=None):
        """ouverture d'un fichier grâce à tkFileDialog"""
        repertoire=''
        name = tkFileDialog.askopenfilename(initialdir=repertoire,
                                            filetypes =
                                            [("Fichiers Tex","*.tex"), 
                                             ("Fichiers Python","*.py"),
                                             ("Fichiers Python","*.gab"),
                                             ("Tous", "*")])
        if name != '':
            f=open(name,"r")
            texte_fichier=f.read()
            f.close()
            texte, sheet = self._new_sheet(os.path.basename(name))
            self.fe.feuilles[sheet] = [name, texte]
            texte.insert(tkinter.INSERT, texte_fichier)
            texte.mark_set(tkinter.INSERT, "1.0")
 
    def fermer_tout(self, event=None):
        """Tout fermer"""
        self.fe.destroy()
 
class Application():
 
    def __init__(self, to_open):
        self.root = tkinter.Tk()
        self.root.title("Essai de menus déroulants")
        self.root.feuilles = {}
        self.root.modification=[]
        self.onglet = ttk.Notebook(self.root)
        self.onglet.pack()
        self.onglet.enable_traversal()        
        self.menu_principal = tkinter.Menu(self.root, relief=tkinter.GROOVE,
                                           tearoff=0)
        self.barre_fichier = Fichier_menu(self.menu_principal, self.onglet,
                                          self.root)
        self.root.configure(menu=self.menu_principal)
        if to_open:
            self.barre_fichier._open_file(to_open)
        else:
            self.barre_fichier.nouvelle_feuille()
        self.root.bind_all('<Control-n>', self.barre_fichier.nouvelle_feuille)
        self.root.bind_all('<Control-o>', self.barre_fichier.ouverture_fichier)
        self.root.bind_all('<Control-q>', self.barre_fichier.fermer_tout)
        self.root.mainloop()
 
 
if __name__ == '__main__':
    if len(sys.argv) > 1 and os.path.isfile(sys.argv[1]):
        Application(sys.argv[1])
    else:
        Application(None) | 
Partager