IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

liste tkinter.IntVar object


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut liste tkinter.IntVar object
    Bonjour à tous,

    j'ai une variable textvariable sur un label
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label(frame, textvariable=var).place(x=0, y=0)
    que j'enregistre en un tableau
    ce qui me donne ceci avec print
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [<tkinter.IntVar object at 0x02EE27B0>, <tkinter.IntVar object at 0x02EE28F0>, <tkinter.IntVar object at 0x02EE2F90>, <tkinter.IntVar object at 0x02EF13F0>]
    comment puis extraire seulement un de ces éléments?
    j'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i in range(len(var_suite)):
    print(var_suite[i])
    j'obtient --> PY_VAR44

    alors je fais ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i in range(len(var_suite)):
    print(var_suite[i].get()
    j'obtient --> 0 (un chiffre)

    s'il vous plaît, comment avoir ceci<tkinter.IntVar object at 0x02EE27B0>

    merci de votre temps

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut,

    Citation Envoyé par taratatasoleil Voir le message
    s'il vous plaît, comment avoir ceci<tkinter.IntVar object at 0x02EE27B0>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for  v in var_suite:
           print(repr(v))
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Invité
    Invité(e)
    Par défaut Supprimer en lot frame(s) générée(s)
    merci pour réponse ne me permettant pas de trouve la solution au problème suivant :
    j'ai repris votre exemple suivant (générer plusieurs frames).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    from tkinter import *
    from tkinter import messagebox  # Librairie des fenêtres d'alerte
     
    variables = []
     
     
    def removeLabel(frame, var):
    	frame.destroy()
    	ix = variables.index(var)
    	variables.pop(ix)
    	# Mise à jour de l'indexation var des frame
    	for i, v in enumerate(variables[ix:], start=ix):
    		v.set(i)
     
     
    def addNewLabel(frame):
    	new_frame = Frame(frame)
     
    	var = IntVar()
    	var.set(len(variables))
    	variables.append(var)
     
    	Label(new_frame, text="test").grid(row=0, column=0)
    	for i in range(1, 5):
    		Label(new_frame, textvariable=var).grid(row=0, column=i)
    	Button(new_frame, text="Remove",command=lambda: removeLabel(new_frame, var)).grid(row=0, column=i)
    	new_frame.pack()
     
    if __name__ == '__main__':
    	root = Tk()
     
    	frame = Frame(root)
     
    	c = Button(root, text="add label", command=lambda: addNewLabel(frame))
    	c.grid(column=0, row=0)
    	frame.grid(row=1, column=1)
     
    	root.mainloop()
    sur cette exercice, un fois généré plusieurs frames, je souhaite supprimer, en une seule fois, les frames générées depuis un menu déroulant (donc depuis une autre def).

    donc j'ai essayé cette solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		global frames
    		for widget in FrameCalc.winfo_children():
    			widget.destroy()
    ou celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    FrameCalc.event_add('<<DeclencheA>>', '<Button-1>')  # Simulation sélection Item Recette
    		FrameCalc.after(0, lambda: FrameCalc.event_generate('<<DeclencheA>>'))
    		print("")
    		print("Liste ID frame générée : 										", FrameCalc.winfo_children())
    		x = -1
    		for v in FrameCalc.winfo_children():
    			x = x + 1
    			print("ID frame générée : 											", repr(v))                                          	# Identification de la frame
    			print("Liste ID des widgets contenu dans la frame : 		", v.winfo_children())								# Identification des widgets contenu dans la frame
    			print("ID widget Button contenu dans la frame : 			", v.winfo_children()[1])  						# Identification de widget Button contenu dans la frame
    			print("")
    			print("frames[x]", frames[x].get())
    			# v.winfo_children()[1].bind('<<DeclencheA>>', removeLabel(repr(v), frames[x]))
    			v.winfo_children()[1].bind('<<DeclencheA>>', selectItem(v.winfo_children()[1]))
    actuellement, il reste à réinitialiser la variable var qui me donne tu fils à retordre.
    merci pour votre idée, orientation vers une solution

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut,

    Quel est le rapport avec la question initiale?

    Si vous créez Frames et Variables à la volée, il faut aussi avoir une "association" pour savoir quelle Variable a été associée à quelles Frames.
    Cette association est à construire pour pouvoir être utilisée dans votre contexte.

    Et si dans votre code, si rien n'essaie de la matérialiser, çà ne marchera pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Invité
    Invité(e)
    Par défaut
    les paramètres à tenir en compte sont frames et var.
    je n'arrive pas à exploiter var car elle est local dans def addNewLabel
    si e la déclare global var dans def addNewLabel, il y disfonctionnement.

  6. #6
    Invité
    Invité(e)
    Par défaut
    voici votre exemple avec la suppression par lot, la suppression de frame est ok, mais la variable var n'est pas réinitialisée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    from tkinter import *
    from tkinter import messagebox  # Librairie des fenêtres d'alerte
     
    variables = []
     
    def deleteall():
    	print("OK")
    	global new_frame
    	for widget in frame.winfo_children():
    		widget.destroy()
     
    def removeLabel(frame, var):
    	frame.destroy()
    	ix = variables.index(var)
    	variables.pop(ix)
    	# Mise à jour de l'indexation var des frame
    	for i, v in enumerate(variables[ix:], start=ix):
    		v.set(i)
     
     
     
    def addNewLabel(frame):
    	new_frame = Frame(frame)
     
    	var = IntVar()
    	var.set(len(variables))
    	variables.append(var)
     
    	Label(new_frame, text="test").grid(row=0, column=0)
    	for i in range(1, 5):
    		Label(new_frame, textvariable=var).grid(row=0, column=i)
    	Button(new_frame, text="Remove",command=lambda: removeLabel(new_frame, var)).grid(row=0, column=i)
    	new_frame.pack()
     
    if __name__ == '__main__':
    	root = Tk()
     
    	frame = Frame(root)
     
    	c = Button(root, text="add label", command=lambda: addNewLabel(frame))
    	c.grid(column=0, row=0)
    	d = Button(root, text="suppression", command=lambda: deleteall())
    	d.grid(column=1, row=0)
    	frame.grid(row=1, column=1)
     
     
     
     
    	root.mainloop()

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Citation Envoyé par taratatasoleil Voir le message
    voici votre exemple avec la suppression par lot, la suppression de frame est ok, mais la variable var n'est pas réinitialisée
    Certes mais vous récupérez un code qui peut fonctionner pour réaliser une opération avec un certain type d'association pour faire quelque chose de différent qui demande de repenser cette association avant espérer que çà fonctionne.

    "penser à" est un soucis de conception pas de programmation.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Invité
    Invité(e)
    Par défaut
    j'ai corriger comme ceci en ajoutant un limite à générer le nb de new_frame

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    from tkinter import *
    from tkinter import messagebox  # Librairie des fenêtres d'alerte
     
    variables = []
     
    def deleteall():
    	print("OK")
    	for widget in frame.winfo_children():
    		widget.destroy()
    	variables[:] = []
     
    def removeLabel(frame, var):
    	frame.destroy()
    	ix = variables.index(var)
    	variables.pop(ix)
    	# Mise à jour de l'indexation var des frame
    	for i, v in enumerate(variables[ix:], start=ix):
    		v.set(i)
     
    def addNewLabel(frame):
    	new_frame = Frame(frame)
     
    	var = IntVar()
    	var.set(len(variables))
    	variables.append(var)
     
    	if var.get() < var_nb_max_sous_frame:
    		Label(new_frame, text="test").grid(row=0, column=0)
    		for i in range(1, 5):
    			Label(new_frame, textvariable=var).grid(row=0, column=i)
    		Button(new_frame, text="Remove",command=lambda: removeLabel(new_frame, var)).grid(row=0, column=i)
    		new_frame.pack()
     
    if __name__ == '__main__':
    	root = Tk()
     
     
    	frame = Frame(root)
    	var_nb_max_sous_frame = IntVar()
    	var_nb_max_sous_frame = 5
     
    	c = Button(root, text="add label", command=lambda: addNewLabel(frame))
    	c.grid(column=0, row=0)
    	d = Button(root, text="suppression", command=lambda: deleteall())
    	d.grid(column=1, row=0)
    	frame.grid(row=1, column=1)
     
     
     
     
    	root.mainloop()
    ça fonctionne bien.
    si j'applique ce fonctionnement sur mon code, les deux première suppression par lot se font, puis pas de message d'erreur, et pas de frame générée

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut,

    Citation Envoyé par taratatasoleil Voir le message
    j'ai corriger comme ceci en ajoutant un limite à générer le nb de new_frame
    Si vous partez sur le principe que détruire toutes les frames c'est aussi détruire toutes les variables associées, variables[:] = [] suffit... Et vous voyez que vous pouvez y arrivez.

    Limiter le nombre de nouvelles Frame, c'est pour autre chose et si vous écrivez var.get() < var_nb_max_sous_frame, vous fabriquez un autre problème (sans rapport avec le précédent).

    si j'applique ce fonctionnement sur mon code, les deux première suppression par lot se font, puis pas de message d'erreur, et pas de frame générée
    La commande "print" est là pour vous aider à savoir si addNewLabel est appelée et si les conditions que vous avez mis pour la création d'une nouvelle Frame sont réunies.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Invité
    Invité(e)
    Par défaut
    bonjour,

    merci pour votre précieuse aide. Elle m'a permis d’abandonner.
    Que dieu vous garde

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/01/2020, 13h49
  2. [Débutant] list(of class.object) chargement de la liste
    Par pereplex dans le forum VB.NET
    Réponses: 3
    Dernier message: 08/09/2016, 12h00
  3. List<Object> list = new ArrayList<Object>();
    Par philippe6 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 10/02/2013, 16h14
  4. List<Map<String, Object>> en List<User>
    Par scrutin dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 14/12/2012, 19h06
  5. List vers un object de navigation
    Par gufra dans le forum Langage
    Réponses: 2
    Dernier message: 19/11/2007, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo