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 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