문제

좋아, 나는 내가 gtk라는 사실로 이것을 서적 할 것이다 그리고 Python Newb이지만 필요한 정보를 파헤칠 수 없었습니다. 기본적으로 내가 가진 것은 라디오 버튼 목록이며 어떤 확인 버튼을 선택했는지에 따라 버튼을 다른 기능에 연결해야합니다. 나는 모든 라디오 버튼을 만들고 혐오스러운 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)
도움이 되었습니까?

해결책

편집 : (코드를 게시 한 이후로) 사용하십시오.

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

그리고 그것을 사용하여 함수의 덕트를 바라보고 다음을 호출하십시오.

my_actions[active]()

편집 : 나는 이것이 Radiobuttons에게는 전혀 유용하지 않다는 것을 언급하는 것을 완전히 잊었다.


귀하의 대답은 Radiobutton "Groups"시스템을 사용하는 것입니다. 설명합니다 이 문서, 그러나 여기에 작은 실용적인 예가 있습니다.

첫째, 그룹은 실제로 다른 여러 radiobuttons를 수집하는 데 사용되는 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()]

다른 팁

먼저, 나는 그것이 오타라고 가정하고 당신은 실제로 당신의 코드에서 get_active ()를 호출하고 set_active ()가 아닌가? 그 외에는 코드를 보지 않고 Pygtk 튜토리얼을 지적 할 수 있습니다. 라디오 버튼

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top