Python Tkinter Problème de radiobutton

Fermé
Schroubb Messages postés 2 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 14 novembre 2008 - 11 nov. 2008 à 20:19
 schroumpff - 13 mai 2010 à 20:12
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 :
# -*- 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:

2 réponses

Schroubb Messages postés 2 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 14 novembre 2008
14 nov. 2008 à 21:07
ayé, il fallait :
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)
0
s'il vous plaît j'ai le même problème (décrit plus haut). j'ai éssayé de rectifier les instructions, mais tjrs rien! Schroubb au cas ou tu aurais resolu ton problème, peut tu m'aider je t'en pries???
0