代码之家  ›  专栏  ›  技术社区  ›  f4nt

Pygtk单选按钮

  •  1
  • f4nt  · 技术社区  · 16 年前

    好吧,我先说我是GTK 巨蟒新手,但我还没能找到我需要的信息。基本上,我有一个单选按钮列表,根据选中的按钮,我需要将一个按钮连接到不同的功能。我尝试创建所有的单选按钮,然后创建一个恶心的if/else阻止检查 sget_active() 在每个按钮上。问题是相同的按钮每次都返回true。有什么想法吗?

    下面是正在使用的代码:

        #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 年前
        1
  •  7
  •   Ali Afshar    16 年前

    编辑:(因为您发布了一些代码),只需使用:

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

    然后用它在函数字典中查找并调用它:

    my_actions[active]()
    

    编辑:我完全忘了提一下,这是一个不好的使用情况在所有的收音机按钮,常规GTK。按钮会更好,在我看来。


    您的答案是使用RadioButton“Groups”系统。解释见 this document 但是这里有一个小的实际例子。

    首先,一个组实际上只是一个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()]
    
        2
  •  0
  •   miles82    16 年前

    首先,我假定这是一个打字错误,您实际上在代码中调用get_active(),而不是set_active()?除此之外,在没有看到代码的情况下,我可以向您介绍关于 radio buttons