PYTHON TKINTER utilisation de labels

bichon3001 Messages postés 9 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 17 juillet 2009 - 10 mai 2009 à 15:56
MeierLink Messages postés 3 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 16 août 2009 - 6 août 2009 à 18:20
Bonjour,
Je souhaite utiliser l'interface graphique TKinter de Python pour appeler une fonction avec un bouton, et afficher le résultat dans un label.
A chaque fois que j'appelle ma fonction avec le bouton, il faudrait que le résutat dans le label soit actualisé.

Merci d'avance.

from random import shuffle
from Tkinter import *

def hasard():# Définit une configuration au hasard, permute 1,2,3,4
text=''
S=[1,2,3,4]
shuffle(S)
text=str(S)
return text

#------ Programme principal -------

# Création du widget principal ("maître") :
fen1 = Tk()
# création des widgets "esclaves" :
lab1 = Label(fen1,text='Config :'+hasard()) #  <= ??????
lab1.pack(side=LEFT)
bou2 = Button(fen1,text='Générer config',command=hasard)
bou2.pack()
bou1 = Button(fen1,text='Quitter',command=fen1.quit)
bou1.pack(side=BOTTOM)
fen1.mainloop() # démarrage du réceptionnaire d'événements
fen1.destroy() # destruction (fermeture) de la fenêtre
#---------------------------------------------
A voir également:

3 réponses

bichon3001 Messages postés 9 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 17 juillet 2009 1
17 mai 2009 à 20:13
merci. Je vais essayer.
1
MeierLink Messages postés 3 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 16 août 2009
6 août 2009 à 18:20
Bonjour!

Je relance ce sujet, car j'ai un problème du même type, mais je n'arrive pas à adapter l'explication de Vychnou à mon cas...

Je débute en programmation python, avec le cours de Swinnen, et je bloque sur une petite application que j'ai essayé de créer pour mettre en application le chapitre sur Tkinter...

Alors pour commencer une petite screen de la fenêtre du programme:


Comme je suis passionné de jeu de rôle j'ai voulu faire un petit programme dans lequel on entre les valeurs des caractéristiques de son personnage, avec un maximum de 15 points à distribuer sur les six caractéristiques
Comme vous pouvez le voir, les valeurs s'affiche bien, tout, mais là où sa coince, c'est que lorsqu'on appuie sur les boutons + ou -, les valeurs de caractéristiques et le reste de point ne s'actualise pas...
Vu que c'est un peu répétitif d'une caractéristique à l'autre, voici juste un extrait du code:

# -*- coding:Utf-8 -*-

#-#-#-# Mini RPG #-#-#-#
# Petit essai de conception pour la mise au point d'un mini-RPG...
# Cette première partie vise à permettre au joueur d'attribuer les points de caractéristiques à son personnage...

from Tkinter import *

########### Définition des fonctions ##########

## Définition des caractéristiques :

# D'abord les caractéristiques et le reste des points à distribuer
force, resistance, magie, esprit, precision, esquive, reste = 8, 8, 8, 8, 8, 8, 15

# Ensuite des définitions qui vont avec

def incforce():
"Augmenter la force"
global force, reste
while reste >= 0:
force += 1
reste -= 1
return force, reste
def decforce():
"Baisser la force"
global force, reste
while (reste <=15) or (force >= 1):
force -= 1
reste += 1
return force, reste


[...]

########### -- Corps du programme -- ##########

fenetre = Tk()                                                                            
fenetre.title("MiniRPG")
Label(fenetre, text='Bonjour et bienvenu sur le mini RPG du CRFN!', fg='blue') .grid(row=0, column=0, columnspan=4)
Label(fenetre, text='Nom :', fg='black').grid(row=1, column=0, sticky=W)
enternom = Entry(fenetre)
enternom.grid(row=1, column=1)                                    # Entrer le nom
Label(fenetre, text='Prénom', fg='black').grid(row=1, column=2)
enterprenom = Entry(fenetre)
enterprenom.grid(row=1, column=3)                               # Entrer le prénom

# Ligne de la force
Label(fenetre, text='Force', fg='black').grid(row=2, column=0, sticky=W) 
bdecforce = Button(fenetre, text='-', command=decforce)
bdecforce.grid(row=2, column=1)
varForce = StringVar()
varForce.set(str(force))
chpforce = Label(fenetre, textvariable=varForce)
chpforce.grid(row=2, column=2)
bincforce = Button(fenetre, text='+', command=incforce)
bincforce.grid(row=2, column=3)


[...]

Là où je ne vois pas comment adapter, c'est que la fonction qui fait changer la variable est appliquée au label. Pour moi, il y a deux fonctions qui agissent sur la même variable...

Est-ce que je pourrai avoir quelques explications supplémentaires?
0
cs_vychnou Messages postés 124 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 11 mai 2009 18
11 mai 2009 à 13:35
Bonjour, lorsque tu configures bou2 :
bou2 = Button(fen1,text='Générer config',command=hasard)
Tu bind la fonction hasard. En fait, il faut que tu bind une commande qui mettes à jour le texte du label en appelant la fonction hasard :

# -*- coding: iso-8859-1 -*-

from random import shuffle
from Tkinter import *

def hasard():# Définit une configuration au hasard, permute 1,2,3,4
  text=''
  S=[1,2,3,4]
  shuffle(S)
  text=str(S)
  return text
 
def generer_config():
  lab1.config(text='Config :'+hasard())
 
#------ Programme principal -------

# Création du widget principal ("maître") :
fen1 = Tk()
# création des widgets "esclaves" :
lab1 = Label(fen1,text='Config :'+hasard()) #  <= ??????
lab1.pack(side=LEFT)
bou2 = Button(fen1,text='Générer config',command=generer_config)
bou2.pack()
bou1 = Button(fen1,text='Quitter',command=fen1.quit)
bou1.pack(side=BOTTOM)
fen1.mainloop() # démarrage du réceptionnaire d'événements
fen1.destroy() # destruction (fermeture) de la fenêtre
#---------------------------------------------

Amuse toi bien !
-1
Rejoignez-nous