Переключатель pyGTK - PullRequest
       7

Переключатель pyGTK

1 голос
/ 24 декабря 2008

Хорошо, я предвосхищу это тем фактом, что я новичок в Python из GTK и , но я не смог найти необходимую мне информацию. По сути, у меня есть список радиокнопок, и в зависимости от того, какая из них отмечена, мне нужно подключить кнопку к другой функции. Я попытался создать все свои переключатели, а затем создать отвратительный блок if / else, проверяющий sget_active() на каждой кнопке. Проблема в том, что одна и та же кнопка возвращает истину каждый раз. Есть идеи?

Вот код, используемый:

    #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)

Ответы [ 2 ]

7 голосов
/ 24 декабря 2008

Редактировать: (поскольку вы опубликовали некоторый код), просто используйте:

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

и используйте его для поиска в поле ввода функций и вызова его:

my_actions[active]()

Редактировать: Я совершенно забыл упомянуть, что это не очень хороший вариант использования для RadioButton, обычная gtk.Button была бы намного лучше, по моему мнению.


Ваш ответ - использовать систему «Группы» RadioButton. Это объяснено в этом документе , но вот небольшой практический пример.

Во-первых, группа - это на самом деле просто RadioButton, который используется для сбора ряда других RadioButton. Вы указываете группу в качестве первого аргумента для конструктора.

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

Теперь все переключатели будут синхронизированы. И читать их так же просто, как:

active_radios = [r for r in r1.get_group() if r.get_active()]
0 голосов
/ 24 декабря 2008

Во-первых, я предполагаю, что это опечатка, и вы на самом деле вызываете get_active () в своем коде, а не set_active ()? Кроме этого, не видя код, я могу указать вам учебник pygtk о переключателях

...