Tkinter : Récuperer la valeur d'un radioButon dans une boucle for
Résolu
Bryan
-
khrug -
khrug -
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 :
Merci beaucoup pour vos réponses,
Bryan
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.-
-
-
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 -
-
-
-
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.
-
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()
-