Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 24-01-2022 17:51:17

tartare
Membre
Inscription : 18-11-2021

[RESOLU] python: variable de controle IntVar set() et get()

Bjour,

je n'arrive pas a comprendre, utiliser les variables de controle, ni ses methodes set() et get()

j'ai 1 fenetre avec un Button qui doit mettre a jour un Label grace à une fonction

mon IntVar


self.v_Int_Var= tk.Intvar(self.fenetre)
 



mon Button


self.btn_01= tk.Button(xxx, xxx, xxx, xxx, command= self.attribuer_Nvelle_Valeur)
 



mon Label


self.lbl_01= tk.Label(xxx, xxx, xxx, textvariable= self.v_Int_Var)
 



ma fonction


def attribuer_Nvelle_Valeur(self):
   self.v_Int_Var= random.randint(1000, 2000)
   print(self.v_Int_Var)
 



imprime ce qu'il faut ds la console

ms comment mettre a jour le textvariable de self.lbl_01?

En vous remerciant
tartare

Dernière modification par tartare (24-01-2022 22:56:45)


ce n'est pas à la machine de dire à l'homme ce qu'il peut faire, c'est a l'homme de dire a la machine ce qu'elle doit faire

Hors ligne

#2 24-01-2022 18:32:56

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : [RESOLU] python: variable de controle IntVar set() et get()

Tu peux poster ton code (ou un code un peu plus fonctionnel)?
J'avoue que j'ai plus du tout le nez dans tkinter.

Mais à priori, c'est ta fonction qui pose problème.
si tu fais:

self.v_Int_Var= random.randint(1000, 2000)

Tu n'attribue pas une nouvelle valeur à ta "tk.Intvar" mais à la variable "self.v_Int_Var"
Pour le visualiser:


self.v_Int_Var= tk.Intvar(self.fenetre)
type(self.v_Int_Var)
self.v_Int_Var= random.randint(1000, 2000)
type(self.v_Int_Var)
 



Tu dois utiliser la méthode .set de ta tk.IntVar pour modifier sa valeur et non le signe = qui va attribuer un nouvel objet (ici un int) à ta variable

Hors ligne

#3 24-01-2022 19:44:00

nlancien
Membre
Distrib. : Debian Stable
Noyau : Linux 4.19.0-12-amd64
(G)UI : Openbox
Inscription : 17-07-2019

Re : [RESOLU] python: variable de controle IntVar set() et get()

Pour mettre a jour un label je ne passe pas par un IntVar, mais par la méthode configure de l'objet.


self.lbl_01= tk.Label(xxx, xxx, xxx, text="toto")

def attribuer_Nvelle_Valeur(self):
    self.lbl_01.configure(text="tata")

 



Tu dois pouvoir aussi passer par :


    self.lbl_01['text'] = "Tata"
 

Hors ligne

#4 24-01-2022 22:41:33

tartare
Membre
Inscription : 18-11-2021

Re : [RESOLU] python: variable de controle IntVar set() et get()

re,

@David5647,
tu m'as donné la réponse
j'utilisais pas le set

@nlancien
non non, je ne parle pas de l'attribut text du Label ms bien de son attribut textvariable


pfff python me prend a la gorge...

merci a ts les 2 d'avoir été là.
passez une bonne soirée.
tartare

ce n'est pas à la machine de dire à l'homme ce qu'il peut faire, c'est a l'homme de dire a la machine ce qu'elle doit faire

Hors ligne

#5 24-01-2022 23:12:10

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : [RESOLU] python: variable de controle IntVar set() et get()

Haha!

C'est une erreur qui me semble assez typique, mais ce que je trouve drôle c'est que ça devrait être contre-intuitif de faire ça en python, puisqu'on fait ça tout le temps.
Par exemple, si tu fais:

my_var = [1,2,3,4]
my_var = 1
print(type(my_var))

Qu'affiche le print à ton avis?

Et si tu fais ça? C'est assez similaire non?

self.v_Int_Var= tk.Intvar(self.fenetre)
self.v_Int_Var= random.randint(1000, 2000)


tongue

Si ce que tu souhaites c'est changer le texte du label, la méthode de @nlancien doit fonctionner aussi.
Utiliser une variable tkinter permet surtout partager une valeur entre plusieurs widget,
ça peut permettre aussi de séparer les données de l'interface dans le code et sûrement d'autres trucs...
Pour des cas simples on peut s'en passer.

ps: tu peux passer le post en résolu
(et, même si c'est par forcément nécessaire là, partager le bout de code, la ligne qui contient la résolution peut être utile pour ceux qui rencontreraient le même problème)

Dernière modification par David5647 (24-01-2022 23:13:28)

Hors ligne

#6 25-01-2022 09:35:05

tartare
Membre
Inscription : 18-11-2021

Re : [RESOLU] python: variable de controle IntVar set() et get()

Bjour,

voici le bout de code

le IntVar


self.v_Int_Var= tk.IntVar(self.fenetre)
 



le bouton auquel on assigne une fonct° (sans argument)


self.btn_hasard= tk.Button(self.fenetre, text="nvelle valeur", padx= 5, pady= 5, command= self.attribuer_Nvelle_Valeur)
 



le label avec son attribut textvariable qui prend la valeur du IntVar


self.label= tk.Label(self.fenetre, text= "vide par defaut", padx= 5, pady= 5, textvariable= self.v_Int_Var)
 



la fonct° que je définis


def attribuer_Nvelle_Valeur(self):
self.v_Int_Var.set(random.randint(1000, 2000))
print(self.v_Int_Var.get())
 



dc en fait, le Label avec son attribut textvariable est constamment a l'ecoute et se met a jour automatiquement au clic bouton.
Pas besoin de creer un evenement (Event).
si on veut recuperer la valeur pr utilisat° avec un autre widget, on utilise la methode get() du IntVar (ce que je vais essayer de ce pas)

En ce qui concerne les bouts de code que tu donnes,
c'est une réassignation de valeur à une variable
ds le 1° cas
my_var= 1 liste (ou 1 tableau(je ne connais pas encore la difference, ms vs parlez bcp + de listes que de tableaux (ds les "tutos" que je lis)))
puis my_var devient 1 entier

ton 2° code (qui est le mien), ben c'est la meme chose
le truc, c'est que lorsqu'on définit un IntVar (ou StringVar) comme je le fais, il y a assignat° de valeur par défaut (0 pr le IntVar, et 1 chaine vide pr le StringVar)

oui oui la methode de nlancien fonctionne (j'ai constaté qd je me suis battu avec le IntVar).
d'ailleurs tu dois pvoir faire une condit° de verif là aussi?
si l'attribut text du bouton devient CECI, alors il se passe ça

j'ai passé le sujet en [RESOLU]

Evidemment, vs pvez vs attendre à ce que je revienne avec d'autres ques... (problemes)
Merci bien
tartare

Dernière modification par tartare (25-01-2022 09:36:43)


ce n'est pas à la machine de dire à l'homme ce qu'il peut faire, c'est a l'homme de dire a la machine ce qu'elle doit faire

Hors ligne

Pied de page des forums