Les menus - Tkinter
PROBLÉMATIQUE
Je souhaite créer un éditeur de texte, permettant de lire, modifier et sauvegarder un fichier.
LE FRAMEWORK TKINTER
Le framework tkinter permet de créer des interfaces graphiques hommes-machine...
Question beauté des interfaces, ce n'est pas ce qui se fait de plus beau, mais question simplicité, et rapidité de codage, on a pour l'instant pas trouver mieux !
Pour importer le module Tkinter, il suffit de faire sous cette forme
Code:
import tkinter as tk
Donc je vous conseille vivement cette manière de suivre qui est une convention pour les expérimentés Python, voir PEP8 qui dit
Citation:
Wildcard imports ( from <module> import * ) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools. There is one defensible use case for a wildcard import, which is to republish an internal interface as part of a public API (for example, overwriting a pure Python implementation of an interface with the definitions from an optional accelerator module and exactly which definitions will be overwritten isn't known in advance).
Pour créer notre éditeur de texte, il nous faut une fenêtre simple où nous ajouterons par la suite,
- Une barre de menu
- Les options de la barre (File, Edit, ...)
- Les actions liées à chaque option (pour File, open, save, ...)
- Un cadre pour lire les résultats des actions
Tout d'abord la fenêtre principale
Code:
# Créer la fenêtre parente
root = tk.Tk()
Code:
root.mainloop() # en fin de code
Pour créer notre barre de menu, nous allons utiliser l'objet Menu, je vais appeler cette barre, menubar
Code:
menubar = tk.Menu(root)
Menu est une classe que l'on va initialisée! Elle prendra évidemment en paramètre la fenêtre sur laquelle on souhaite ajouter notre barre de menu, c'est à dire dans notre cas, root.
CRÉATION DES OPTIONS DE LA BARRE DE MENU
On utilisera la classe Menu pour faire cela aussi...
Code:
filemenu = tk.Menu(menubar, tearoff=0)
editmenu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='File', menu=filemenu)
menubar.add_cascade(label='Edit', menu=editmenu)
CRÉATION DES ACTIONS POUR CHAQUE OPTION
Pour faire cela, on doit avoir deux informations:
- Le nom de l'action (une chaîne de caractères)
- L'action sous forme d'une fonction (sans argument)
Pour l'option File (variable filemenu) ça donnera par exemple
Code:
filemenu.add_command(label='Ouvrir', command=fopen)
filemenu.add_command(label='Sauvegarder', command=save)
filemenu.add_command(label='Quitter', command=root.quit) # quitte le programme
Que cela ne tienne, j'en crée une pour fopen
Code:
def fopen():
currentPath = os.getcwd() # Chemin courant
myFile = filedialog.askopenfile\
(
mode='r',
defaultextension='.txt',
initialdir=currentPath
) # Ouverture de la fenêtre pour choisir le fichier
content = myFile.read() # Texte du fichier ouvert
text.insert(tk.END, content) # Insertion du texte dans le widget Text
Code:
from tkinter import filedialog
Code:
def save():
''' à compléter '''
pass
AFFICHAGE DE LA BARRE DE MENU SUR LA FENÊTRE
Ne surtout pas oublier, sinon vous ne verrez rien, c'est une ligne toute bête, mais souvent elle est oubliée, car souvent on copie du code sans comprendre... Ici je vous l'explique, ça va rendre visible votre barre de menu !
Code:
root.config(menu=menubar)
Voici le code testable, il permet d'assurer les objectifs fixés au départ, avec l'opportunité pour vous de le compléter, car un éditeur de texte est plus complexe que cela, vous vous en doutez !
Code:
from tkinter import filedialog
import tkinter as tk
import os
# Les différentes actions à executer
def fopen():
currentPath = os.getcwd() # Chemin courant
myFile = filedialog.askopenfile\
(
mode='r',
defaultextension='.txt',
initialdir=currentPath
) # Ouverture de la fenêtre pour choisir le fichier
content = myFile.read() # Texte du fichier ouvert
text.insert(tk.END, content) # Insertion du texte dans le widget Text
def save():
''' à compléter '''
pass
# ----------------------------------------------------------
# Programme principal
# ----------------------------------------------------------
# Créer la fenêtre parente
root = tk.Tk()
# Création d'une fenêtre text pour ajouter le texte d'un fichier ouvert (pour l'exemple)
text = tk.Text(root)
text.pack()
# Créer sa barre de menu dans la fenêtre parente
menubar = tk.Menu(root)
filemenu = tk.Menu(menubar, tearoff=0)
editmenu = tk.Menu(menubar, tearoff=0)
# Ajouter les différentes options dans la barre de menu
menubar.add_cascade(label='File', menu=filemenu)
menubar.add_cascade(label='Edit', menu=editmenu)
# Ajouter les différentes actions pour chaque option
filemenu.add_command(label='Ouvrir', command=fopen)
filemenu.add_command(label='Sauvegarder', command=save)
filemenu.add_command(label='Quitter', command=root.quit) # quitte le programme
# Lancement de la boucle événementielle
root.config(menu=menubar)
root.mainloop()
from Hackademics : Forum de hacking hackers white hat cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1gXtD1Z
via IFTTT
Aucun commentaire:
Enregistrer un commentaire