Python Tkinter Problème de radiobutton
Schroubb
Messages postés
2
Statut
Membre
-
schroumpff -
schroumpff -
Bonjour,
Je tente de créer une fenêtre qui en crée une autre. Les deux sont codées dans des classes séparées.
La classe fille contient une liste de boutons radio et un bouton "lancer" qui affiche la valeur associée au bouton choisi dans la console python shell.
La classe mère a trois boutons : un pour quitter, un qui écrit dans la console python shell et un qui instancie une fenêtre fille.
Si on instancie uniquement la classe (fille) radioButtWin, tout est normal, les boutons marchent et quand on appuie sur "lancer" on voit bien que le bon bouton est selectionné.
Si on instancie uniquement la classe (mère) mainWin les boutons radio ne fonctionnent plus : la valeur associée n'est plus récupérée (i.e quand on appuie sur "lancer" 0 est affiché quelque soit le bouton sélectionné).
Voici le code correspondant :
Est-ce que vous auriez une idée de la cause de ce comportement (variable "choix" de la classe fille qui n'est plus modifiée par le choix du bouton radio) ?
Et si possible une solution :-D
Je tente de créer une fenêtre qui en crée une autre. Les deux sont codées dans des classes séparées.
La classe fille contient une liste de boutons radio et un bouton "lancer" qui affiche la valeur associée au bouton choisi dans la console python shell.
La classe mère a trois boutons : un pour quitter, un qui écrit dans la console python shell et un qui instancie une fenêtre fille.
Si on instancie uniquement la classe (fille) radioButtWin, tout est normal, les boutons marchent et quand on appuie sur "lancer" on voit bien que le bon bouton est selectionné.
Si on instancie uniquement la classe (mère) mainWin les boutons radio ne fonctionnent plus : la valeur associée n'est plus récupérée (i.e quand on appuie sur "lancer" 0 est affiché quelque soit le bouton sélectionné).
Voici le code correspondant :
# -*- coding: cp1252 -*-
import Tkinter, sys
gButtonWidth=20
# fenêtre principale
class mainWin(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.title('Mon application')
self.configure(width=100)
# Cadre des boutons
self.cadre = Tkinter.LabelFrame(self)
self.cadre.configure(text="Lancer deux sous-fenêtres",bd=2,relief='groove')
self.cadre.grid(row=1,column=1)
#Liste des boutons
self.LaunchButton = Tkinter.Button(self.cadre,text=u"Lancer rien", width=gButtonWidth, command=self.OnLaunchButton)
self.LaunchButton.pack()
self.ReportButton = Tkinter.Button(self.cadre,text=u"Boutons radio", width=gButtonWidth, command=self.OnReportButton)
self.ReportButton.pack()
self.QuitButton = Tkinter.Button(self.cadre,text=u"Quitter", width=gButtonWidth, command=self.OnQuitButton)
self.QuitButton.pack()
self.resizable(False,False)
def OnReportButton(self):
print "on lance Affiche des boutons radio"
self.fille = radioButtWin("mere")
def OnLaunchButton(self):
print "on lance... rien"
def OnQuitButton(self):
self.destroy()
sys.exit()
# fenêtre fille boutons radio
class radioButtWin(Tkinter.Tk):
"Affiche des boutons radio"
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.liste = ['a','b','c','d']
self.RadioBouttonsList = []
self.choix = Tkinter.IntVar(0)
for i in range(len(self.liste)) :
self.bouttonTmp = Tkinter.Radiobutton(self)
self.bouttonTmp.configure(text=self.liste[i], indicatoron=0, variable=self.choix, value=i)
self.bouttonTmp.grid(row=i+1,column=1)
self.RadioBouttonsList.append(self.bouttonTmp)
self.LaunchButton = Tkinter.Button(self,text=u"Lancer",
width=gButtonWidth, command=self.OnLaunchButton)
self.LaunchButton.grid(row=1,column=2)
self.resizable(False,False)
def OnLaunchButton(self):
print self.choix.get()
if __name__ == "__main__":
app = mainWin(None)
# app = radioButtWin(None)
app.mainloop()
Est-ce que vous auriez une idée de la cause de ce comportement (variable "choix" de la classe fille qui n'est plus modifiée par le choix du bouton radio) ?
Et si possible une solution :-D
A voir également:
- Python Tkinter Problème de radiobutton
- Citizen code python - Accueil - Outils
- Citizen code python solution - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Python par la pratique : 101 exercices corrigés pdf - Forum Python
- [PyCharm] Pas d'interpréteur python ✓ - Forum Python
2 réponses
ayé, il fallait :
1. définir la classe fille comme une classe héritée d'un Toplevel :
remplacer :
par :
2. Dans la classe mère, instancier la classe fille comme ayant pour racine la classe mère :
remplacer :
par :
1. définir la classe fille comme une classe héritée d'un Toplevel :
remplacer :
class radioButtWin(Tkinter.Tk):
par :
class radioButtWin(Tkinter.Toplevel):
2. Dans la classe mère, instancier la classe fille comme ayant pour racine la classe mère :
remplacer :
self.fille = radioButtWin("mere")
par :
self.fille = radioButtWin(self)