Question

D'accord, je vais préface à cela le fait que je suis un GTK et Python newb, mais je n'ai pas pu déterrer les informations dont je avais besoin. En fait ce que j'ai une liste de boutons radio, et sur la base sur laquelle on est vérifié, je dois connecter un bouton à une autre fonction. J'ai essayé de créer tous mes boutons radio, et puis en créant une dégoûtante si / bloc d'autre pour vérifier sget_active() sur chaque bouton. Le problème est le même bouton renvoie true à chaque fois unique. Toutes les idées?

Voici le code utilisé:

    #Radio Buttons Center
    self.updatePostRadioVBox = gtk.VBox(False, 0)
    self.updatePageRadio = gtk.RadioButton(None, "Updating Page")
    self.updatePostRadio = gtk.RadioButton(self.updatePageRadio, "Updating Blog Post")
    self.pageRadio = gtk.RadioButton(self.updatePageRadio, "New Page")
    self.blogRadio = gtk.RadioButton(self.updatePageRadio, "New Blog Post")
    self.addSpaceRadio = gtk.RadioButton(self.updatePageRadio, "Add New Space")
    self.removePageRadio = gtk.RadioButton(self.updatePageRadio, "Remove Page")
    self.removePostRadio = gtk.RadioButton(self.updatePageRadio, "Remove Blog Post")
    self.removeSpaceRadio = gtk.RadioButton(self.updatePageRadio, "Remove Space")


    #Now the buttons to direct us from here
    self.returnMainMenuButton = gtk.Button(" Main Menu ")
    self.returnMainMenuButton.connect("clicked", self.transToMain)
    self.contentManageHBoxBottom.pack_start(self.returnMainMenuButton, False, False, 30)
    self.contentProceedButton = gtk.Button("    Proceed    ")
    self.contentManageHBoxBottom.pack_end(self.contentProceedButton, False, False, 30)

    if self.updatePageRadio.get_active():
        self.contentProceedButton.connect("clicked", self.updatePage)

    elif self.updatePostRadio.get_active():
        self.contentProceedButton.connect("clicked", self.updatePost)

    elif self.pageRadio.get_active():
        self.contentProceedButton.connect("clicked", self.newPage)

    elif self.blogRadio.get_active():
        self.contentProceedButton.connect("clicked", self.newBlogPost)

    elif self.addSpaceRadio.get_active():
        self.contentProceedButton.connect("clicked", self.newSpace)

    elif self.removePageRadio.get_active():
        self.contentProceedButton.connect("clicked", self.removePage)

    elif self.removePostRadio.get_active():
        self.contentProceedButton.connect("clicked", self.removeBlogPost)

    elif self.removeSpaceRadio.get_active():
        self.contentProceedButton.connect("clicked", self.removeSpace)
Était-ce utile?

La solution

Edit: (depuis que vous avez publié un code), il suffit d'utiliser:

active = [r for r in self.updatePageRadio.get_group() if r.get_active()][0]

et l'utiliser pour rechercher dans un dict de fonctions et de l'appeler:

my_actions[active]()

Edit:. Je suis totalement oublié de mentionner que ce n'est pas un bon cas d'utilisation du tout pour RadioButtons, gtk.Button régulière serait beaucoup mieux à mon avis


Votre réponse est d'utiliser le système RadioButton « groupes ». Il est expliqué dans ce document , mais voici un petit exemple pratique.

Tout d'abord un groupe est vraiment juste un RadioButton lui-même qui est utilisé pour recueillir un certain nombre d'autres RadioButtons. Vous spécifiez un groupe comme premier argument au constructeur.

r1 = gtk.RadioButton(None, label='Cat') # this has no group, it is the first
r2 = gtk.RadioButton(r1, label='Mouse') # use the first radio
                                        # button as the group argument
r3 = gtk.RadioButton(r1, label='Dog')   # again use r1

Maintenant, tous les boutons radio seront synchronisés. Et la question de les lire est aussi facile que:

active_radios = [r for r in r1.get_group() if r.get_active()]

Autres conseils

D'abord, je présume que c'est une faute de frappe et vous appelez réellement get_active () dans votre code et non set_active ()? A part cela, sans voir le code, je peux vous indiquer un tutoriel pygtk sur le boutons radio

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top