문제
좋아, 나는 내가 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 튜토리얼을 지적 할 수 있습니다. 라디오 버튼