Frage

In Ordnung, ich werde Vorwort dies mit der Tatsache, dass ich einen GTK und Python newb, aber ich habe nicht in der Lage, die Informationen zu graben, bis ich brauchte. Im Grunde, was ich habe, ist eine Liste von Radiobuttons, und basierend auf das man überprüft, ich brauche eine Schaltfläche, um eine andere Funktion zu verbinden. Ich habe versucht, alle meine Radio-Buttons erstellen und dann eine ekelhafte zu schaffen, wenn / else-Block auf jeder Taste für sget_active() überprüfen. Das Problem ist, die gleiche Taste gibt true zurück, jedes einzelne Mal. Irgendwelche Ideen?

Hier ist der Code im Einsatz:

    #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)
War es hilfreich?

Lösung

Edit: (da Sie einige Code geschrieben), nur verwenden:

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

und verwenden Sie diese in einem dict von Funktionen nachzuschlagen und nennen es:

my_actions[active]()

Bearbeiten. Ich habe ganz vergessen zu erwähnen, dass dies keine guter Anwendungsfall überhaupt für Radiobuttons, regelmäßige gtk.Button wäre viel besser, meiner Meinung nach

ist

Ihre Antwort ist die Radiobutton „Gruppen“ System zu verwenden. Es wird in diesem Dokument erklärt, aber hier ist ein kleines praktisches Beispiel.

Zunächst wird eine Gruppe ist wirklich nur ein RadioButton- selbst, die eine Reihe von anderen Radiobuttons sammeln verwendet wird. geben Sie eine Gruppe als erstes Argument an den Konstruktor.

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

Nun sind alle Radiobuttons werden synchronisiert. Und die Sache, sie zu lesen, ist so einfach wie:

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

Andere Tipps

Zuerst nehme ich an, dass ein Tippfehler ist und Sie anrufen tatsächlich get_active () im Code und nicht SET_ACTIVE ()? Other than that, ohne den Code zu sehen, kann ich Ihnen zu einem pygtk Tutorial über Radiobuttons zeigen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top