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
| # -*- coding : cp1252 -*-
from Tkinter import*
'''ce tuto n'est pas facile mais très intéressant...'''
class BarreDesMenus(Frame):
"""C'est la barre des menus, dans cette classe on définira ce qu'il ya dedans"""
#Initialisation de la class :
def __init__(self, boss = None): #boss représente une fenetre maitre, soi = le nom des objets de la classe
Frame.__init__(self, borderwidth = 2) #taille du bord de la frame = fenetre
#Donc c'est une bande, avec deux pixels d'écart des bords (autres)
#une frame ressemble à Tk avec d'autres propriétés
#Bon on fait un menu <Menu 1> :
BoutonMenu1 = Menubutton(self, text = "<Menu 1>")
#Menubutton est un type de bouton. Quand on clique dessus, on pourrait avoir un menu
BoutonMenu1.pack(side = LEFT) #la méthode pack permet des "endroits" de position..
#On définit ce qu'il y a dans le menu 1
menu1 = Menu(BoutonMenu1) #on dit que c'est un menu sortant de tel bouton
menu1.add_command(label = "Commande1", command = boss.commande1)
#boss est le "maitre" (fenetre maitresse), vous verrez plus loin dans le code les instructions viennent d'elles
menu1.add_command(label = "Commande 2", command = boss.commande2)
BoutonMenu1.configure(menu = menu1) #on dit que le bouton doit dérouler ce menu
#On fait un menu <Menu 2>
BoutonMenu2 = Menubutton(self, text = "<Menu 2>")
#on définit ce qu'il y a dans le menu 2
menu2 = Menu(BoutonMenu2)
menu2.add_command(label = "Effacer tout", command = boss.effacer)
menu2.add_separator() #ben une ligne qui sépare les deux et on va dans l'ordre....
menu2.add_command(label = "Quitter", command = boss.quit)
#boss.quit signifie qu'on quitte la fenetre maitresse (donc on quitte tout vu que la fenetre maitresse contient tout)
BoutonMenu2.configure(menu = menu2)
BoutonMenu2.pack(side = LEFT, padx = '5')
#On fait tout ca dans l'ordre, vu que le premier vient d'etre définit, le prog met le bouton a coté
#mais il va coller l'autre bouton donc il faut un écart horizontal ==> padx = '5' pixels
def cercle(canevas, x, y, r): #cette fonction n'est pas dans une classe....
"""dessin d'un cercle de rayon <r> en <x,y> dans le canevas <can>"""
canevas.create_oval(x-r, y-r, x+r, y+r) #une création d'un bo cercle
class Application(Frame):
""" Application principale """
def __init__ (self, boss = None):
Frame.__init__(self)
self.master.title("Un tuto sur les menus") #c'est l'objet maitre (master)
BarreMenus = BarreDesMenus(self) #objet qui dépend de notre première classe
BarreMenus.pack() #ca veut dire qu'on la crée, on la fait apparaitre
#on crée un canevas dans lequel on pourra travailler (graphiquement, on pourrait faire un truc sans canevas)
self.canevas = Canvas(self, bg = 'light grey', height = 300,
width = 300, borderwidth = 2)
self.canevas.pack()
self.pack()
#Définition des 3 commandes citées plus haut dans la classe "BarreDesMenus"
def commande1(self):
self.canevas.create_rectangle(80, 100, 180, 200, fill = "red") #c'est plutot un carré
#Pour dessiner un rectangle il faut donner les coord du point en haut à gauche et du point en bas à droite
#noublions pas, les x augmentent vers la droite ET LES Y AUGMENTENT VERS LE BAS (en python)
self.canevas.create_text(10, 10, anchor =NW, text ='Un ptit texte', #methode anchor, nordwest
font=('Arial', 20, 'bold italic'), fill ='blue')
# la méthode anchor permet une ancre dans une certaine zone du canevas. 10,10 est la coordonnée d'un point dans cette zone
def commande2(self):
cercle(self.canevas, 125, 125, 20)
cercle(self.canevas, 120, 122, 4)
cercle(self.canevas, 130, 122, 4) #un visage très moche
cercle(self.canevas, 125, 130, 6)
#ben voilà quoi des cercles...
def effacer(self):
"""Ca effacera tout ce qu'il y a dans le canevas"""
self.canevas.delete(ALL)
appli = Application()
appli.mainloop() #n'oublions pas ... |