2009-11-21 2 views

답변

3

없어야합니다. 본질적으로 라디오 버튼 그룹은 '많은 것 중 하나를 선택하십시오'유형의 컨트롤입니다. 인간의 관점에서, 그 중 하나가 항상 선택된다는 아이디어가 있습니다. 프레임 워크는 실제로이를 강제해야하므로 그룹에 '선택되지 않은'상태가 있어서는 안됩니다. 라디오 버튼 그룹이 선택되지 않은 상태 (가능한 프레임 워크에서)는 사용자에게 컨트롤을 가져올 수있는 상태가 아니기 때문에 매우 혼란 스럽습니다.

'선택 안함'상태를 원할 경우 그룹에 '없음'요소를 추가해야하며, 그렇지 않으면 원하는대로 수행 할 수있는 다른 컨트롤 유형을 선택해야합니다.

+2

감사합니다. "없음"라디오 버튼을 추가했습니다. :) – linkmaster03

+3

전혀 동의하지 않습니다. 라디오 그룹이 다른 위젯과의 상호 작용에 영향을받지 않는 상황을 상상해보십시오. 항목을 선택하지 않아야합니다. GTK 자체는 당신이 어떤 상상의 규칙에 의해 행동하도록 강제하지 않을 것입니다. –

+1

@Ali A : 여전히 선택을하지 않아야합니다. 그룹은 상호 작용할 수 없다는 표시로써 시각적으로 다른 그룹 (대부분의 시스템에서 회색으로 표시)이되어야합니다. 양호한 UI에서는 다른 컨트롤의 설정을 되돌릴 경우 라디오 버튼이 다른 컨트롤을 터치하기 전의 상태로 되돌아 가야하기 때문에 이전 선택이 여전히 존재해야합니다. –

1

새로운 상태가 이전 상태와 다른 경우 버튼을 클릭 한 것처럼 시뮬레이션합니다. 그런 다음 라디오 버튼 코드는 그룹의 다른 라디오 버튼이 활성 상태인지 확인하고 그렇지 않은 경우 변경된 것을 거부합니다.

예상대로 그룹을 만들 때 첫 번째 라디오 버튼이 항상 활성화로 설정되어 있어야합니다. 표시되지 않으면 버그 일 가능성이 높습니다. 사용자가 만든 첫 번째 버튼에 대해 radio_button.get_activeTrue (UI에 표시되지 않는 경우에도)인지 확인하는 것이 좋습니다.

나는 모든 라디오 버튼을 선택 취소하려는 경우 다른 UI 요소를 조사해야하지만 Michael Kohne에 동의합니다.

+0

그 일을 시도했지만 그룹의 라디오 버튼 중 하나를 자동으로 다시 활성화합니다. – linkmaster03

+0

구현을 살펴본 후 대답을 업데이트했습니다. – hallski

+0

코드를 확인해 주셔서 감사합니다! 우리가'set_active (false)'('gtkmm' 말로)에 함수를 주지만 모든 경우에 실제로 그것을 존중하지는 않을 것 같지만, 오 잘. –

6

나는 Michael에 동의하지만, 기록을 위해이 작업을 수행 할 수 있습니다.

이 작업을 수행하는 한 가지 방법은 활성화 할 수있는 숨겨진 라디오 버튼을 사용하는 것입니다. 그러면 표시되는 모든 버튼이 비활성 상태가됩니다. 빠른 N '더러운 예 : 특히 권장되지

import gtk 

window = gtk.Window() 
window.set_default_size(200, 200) 

rb1 = gtk.RadioButton() 
rb2 = gtk.RadioButton() 
rb3 = gtk.RadioButton() 

rb2.set_group(rb1) 
rb3.set_group(rb2) 

rb3.set_active(True) 

hbox = gtk.HBox() 

hbox.add(rb1) 
hbox.add(rb2) 
hbox.add(rb3) 

button = gtk.Button("Click me") 
button.connect("clicked", lambda x: rb3.set_active(True)) 

hbox.add(button) 

window.add(hbox) 
window.show_all() 

rb3.hide() 

gtk.main() 
+0

최소한 내 컴퓨터에서도 아무 것도없는 요소가 그룹의 첫 번째 요소이고 단순히 모든 상자에 추가되지 않으면 작동합니다. –

+0

모든 일들이 있었음에도 불구하고 나를 위해 일했습니다. 내 GUI에서는 RadioButton이 감도가 낮고 이전 값과 관련이없는 경우 (새 데이터를로드하기 전에 취소 할 수없는 확인 단계)에이 기능이 필요합니다. –

1

내 솔루션, 화면에 표시되지 않은 같은 그룹에있는 라디오 버튼을 가지고있다.

Glade에서 위젯 추가 버튼의 상황에 맞는 메뉴에서 '위젯을 최상위로 추가'할 수 있습니다. 코드에서 나는 기본적으로 위젯을 표시된 gui에 추가하지 않거나 조심스럽게 (.showall()을 포함한) 표시하지 않습니다.

+0

그래, 방금 내 포함하는 클래스에 더미 RadioButton을 추가하고 단순히 어디에도 표시하지 마십시오. 탈감작시에, 그것은 실제의 모든 (보이는) 버튼이 선택 해제되도록 선택됩니다. –

관련 문제