Tkinter : Récuperer la valeur d'un radioButon dans une boucle for

Résolu/Fermé
Bryan - Modifié le 28 oct. 2019 à 14:55
 khrug - 30 oct. 2019 à 14:57
Bonjour à vous,

J'ai un problème très simple que je n'arrive pas à résoudre malgré toutes mes tentatives.
Je veux juste récupérer la valeur des mes RadioButtons avec get(), sauf que cette valeur est soit vide soit nulle.
J'ai essayé avec des variables en Int et en String mais cela ne résout pas le problème. (J'ai déjà fais tous les forums mais aucune solution fonctionne ...)

Je vous prie de trouver ci-dessous le code correspondant :

please=tk.IntVar()

def Sheet(list_sheet):
       sheet_name=tk.Tk()
       whichsheet=tk.Label(sheet_name, text="Veuillez cocher la feuille sur laquelle vous souhaitez travailler.")
       whichsheet.pack()

       for i in range (len(list_sheet)):
              choix=tk.Radiobutton(sheet_name, text=list_sheet[i], variable=please, value=i, command=catch)
              choix.pack()

       confirm=tk.Button(sheet_name, text="Confirmer", command=sheet_name.destroy)
       confirm.pack()

       sheet_name.mainloop()

def catch():
        print (please.get())

Sheet(SheetNameList) 






Merci beaucoup pour vos réponses,
Bryan


Configuration: Windows / Firefox 68.0

2 réponses

Bonjour,

Chez moi ton code plante, car tu as créés une var tkinter avant d'avoir créer la fenêtre.

Par ex. comme ça :

import tkinter as tk

def Sheet(list_sheet):
       whichsheet=tk.Label(sheet_name, text="Veuillez cocher la feuille sur laquelle vous souhaitez travailler.")
       whichsheet.pack()

       for i in range (len(list_sheet)):
              choix=tk.Radiobutton(sheet_name, text=list_sheet[i], variable=please, value=i, command=catch)
              choix.pack()

       confirm=tk.Button(sheet_name, text="Confirmer", command=sheet_name.destroy)
       confirm.pack()

       sheet_name.mainloop()

def catch():
        print (please.get())

sheet_name=tk.Tk()
SheetNameList = ('aaaa', 'bbbbb')
please=tk.IntVar()

Sheet(SheetNameList)


Cela fonctionne très bien.
0
Merci khrug pour ta réponse, mais la fonction catch me print toujours 0.
Est ce que tu arrives à récupérer 0 pour 'aaaa' et 1 pour 'bbbb' etc ?
0
Bonjour,

Oui, j'obtiens bien 0 pour "aaaa" et 1 pour "bbbb"

Hum, es-tu sûr d'exécuter le bon script ? Celui que tu modifies et pas un autre ?
Car, il est très étrange que tu n'aies pas eu de plantages avec le script que tu as posté.
0
Effectivement le code que tu m'as fourni fonctionne. Enfaite ce qui est faux (ou incompatible) c'est lorsque je récupère le nom de mes feuilles dans la liste avec ces 3 commandes.

import xlrd
import tkinter as tk
from tkinter.filedialog import askopenfilename

name = askopenfilename() #Avoir le chemin d'acces du fichier
workbook = xlrd.open_workbook(name)
SheetNameList = workbook.sheet_names()

Aurais-tu une explication ?

Merci beaucoup pour tes réponses,
Bryan
0
khrug > Bryan
29 oct. 2019 à 16:57
Non, je n'ai pas d'explications.

D'après la doc, sheet_names retourne une liste, l'as-tu affiché avec un print pour voir ce que ça contient ?
0
Oui et c'est bien une liste itérable...
0
Si quelqu'un à le même problème, ça doit être parce qu'une fenêtre n'est pas fermée (destroy) dans mon cas c'était celle que askopenfilename ouvrée.
0
Donc la fenemture de la fenêtre empêchait la var tkinter de fonctionner ?
J'aimerai bien comprendre.

Puis d'ailleurs pour éviter d'avoir 2 fenêtres principales, car, si elle n'est pas créée, tkinter en fera une automatiquement, c'est ce qu'il se passe lorsque tu utilises askopenfilename.

Il suffit d'appeler askopenfilename après avoir créé ta fenêtre.

import xlrd
import tkinter as tk
from tkinter.filedialog import askopenfilename

def Sheet(list_sheet):
    whichsheet=tk.Label(sheet_name, text="Veuillez cocher la feuille sur laquelle vous souhaitez travailler.")
    whichsheet.pack()
    for i in range (len(list_sheet)):
        choix=tk.Radiobutton(sheet_name, text=list_sheet[i], variable=please, value=i, command=catch)
        choix.pack()

def catch():
    print (please.get())

sheet_name=tk.Tk()

please=tk.IntVar()

name = askopenfilename() #Avoir le chemin d'acces du fichier
workbook = xlrd.open_workbook(name)
SheetNameList = workbook.sheet_names()
Sheet(SheetNameList)

confirm=tk.Button(sheet_name, text="Confirmer", command=sheet_name.destroy)
confirm.pack()

sheet_name.mainloop()
0