vendredi 26 décembre 2014

Python TKinter widgets

widgets

 Un widgets est un petit objet graphique (boutons, champs de texte, cases à cocher...)
Tkinter définit les widgets pouvant être utilisés dans une fenêtre.

Les labels
Rôle:  afficher du texte dans une fenêtre, du texte. Ce texte ne peut pas être modifié par l'utilisateur.

Les boutons
Rôle: déclencher des actions selon le comportement de l'utilisateur
 
Les champs
Rôle: afficher une zone de texte  dans une fenêtre, ce texte  peut être modifié par l'utilisateur.
 
Les cases à cocher
Rôle: permettre des sélections parmi plusieurs choix
 
Les boutons radio
Rôle: permettre une sélection unique parmi plusieurs choix
 
Les listes déroulantes
Rôle: pour proposer une sélection unique parmi plusieurs choix, comme les boutons radio, mais avec une ergonomie différente.
 
Cadre, ou fenêtre ( Frame in English):
Rôle: diviser l'écran en zones, pour placer les informations.

 

Il existe d'autres options communes à la plupart des widgets (la couleur de fond bg, la couleur du widget fg, etc.) et d'autres plus spécifiques à un certain type de widget.
Il existe plusieurs widgets qui peuvent contenir d'autres widgets. Par exemple les cadres (frame).


 
  ATTENTION: dans ce qui suit les indentations ont été perdues lors du copier coller.
Reprenons un exemple simple, avec l'affichage d'un bouton :

# On importe Tkinter
from tkinter import *

# fonction hello affiche un message

def hello():

print ('message du Blerow!')

# On crée une fenêtre. Je l'appelle racine car c'est la racine de l'interface que je vais programmer

racine = Tk()

# un label est une ligne de texte , On affecte le label à la fenêtre racine

champ_label = Label(racine, text="Bonjour Blerow !")

# le pack permet d'associer le widget à l'environnement

champ_label.pack()

#creation d'un label qui utilise la commande hello()

champ_label2 = Label(racine, text='helloooo')

# le pack permet d'associer le widget à l'environnement

champ_label2.pack()



b1 = Button(racine, text='hello', command=hello)

b1.pack(side=LEFT)

# On affiche la fenêtre racine via une boucle

racine.mainloop()





 
 
J'ai cliqué plusieurs fois sur le bouton hello, à la console le message définit dans la fonction hello() s'affiche.
 
Le positionnement dans la fenêtre s'effectue lors de l'association à l'environnement b1.pack()
 
Le même exemple en rajoutant une case à cocher:
from tkinter import *
def case1():
if retour1.get():
print ("case 1 cochee intiale")
else:
print ("case 1 pas cochee init")
def case2():
print ("xcase2")
racine=Tk()
retour1=IntVar() # creation de variable-retour
retour2=IntVar()
bouton1=Checkbutton(racine, variable=retour1, text="Case 1", command=case1())
bouton1.pack()
bouton2=Checkbutton(racine, variable=retour2, text="Case 2", command=case2())
bouton2.pack()
if retour1.get(): # la variable 'retour' = 1 si la case est cochee, 0 sinon
print ("case 1 cochee intiale")
else:
print ("case 1 pas cochee init")
if retour2.get(): # la variable 'retour' = 1 si la case est cochee, 0 sinon
print ("case 2 cochee init ")
else:
print ("case 2 pas cochee init")
# boucle mainloop()
racine.mainloop()
if retour1.get(): # la variable 'retour' = 1 si la case est cochee, 0 sinon
print ("case 1 cochee boucle")
else:
print ("case 1 pas cochee boucle")
if retour2.get(): # la variabe 'retour' = 1 si la case est cochee, 0 sinon
print ("case 2 cochee boucle")
else:
print ("case 2 pas cochee boucle")


 
 
Insertion d'une image dans un frame
 
from tkinter import *
fenetre = Tk ()
photo = PhotoImage(file ='bandeau2.png')
espace_image = Canvas(fenetre, width =170, height =170, bg ='blue')
espace_image.grid(row=3 ,columnspan=2, column=0, padx =10, pady =10)
espace_image.create_image(100, 100, image =photo)
 fenetre.mainloop ()
 
 
 
 
 
j'ai cherché des exemples un peu plus complexes et je suis tombé sur __init__

Kezako ?
 
__init__ est appelé dès la création de l'instance de la classe est créée, le premier argument de chaque méthode de classe, est toujours une référence à l'instance actuelle de la classe par convention, cet argument est toujours nommé self. 

Aucun commentaire:

Enregistrer un commentaire