2010-04-21 3 views
1

ListStore에 연결된 두 개의 열 TreeView가 있습니다. 두 열은 모두 CellRenderCombo 콤보 상자입니다.pyGTK의 조건부 CellRenderCombo TreeView

사용자가 첫 번째 상자에서 항목을 선택하면 두 번째 상자에서 옵션 집합을 동적으로로드해야합니다.

예를 들어, 내가 원하는 동작은 다음과 같습니다

On row 0, the user selects "Alphabet" in the first column box. 
    The second column box is populated with the letters "A-Z". 
On row 1, the user selects "Numbers" in the first column box. 
    The second column box is populated with the numbers "0-9". 
On row 2, the user selects "Alphabet" in the first column box. 
    The second column box is populated with the letters "A-Z". 
etc. 

사람이 작업을 수행하는 방법을 알고, 또는 내가 분석 할 수있는 유사한 동작을 가지고있는 오픈 소스 pygtk 또는 GTK 프로젝트를 볼 수 있습니까?

답변

0

첫째, 당신은 같은 모델에서 두 번째 렌더러의 model 속성을 결합해야합니다 M가 모델을 저장하는 열 번호 (가능성이 gtk.ListStore) 인

gtk.TreeViewColumn ('...', gtk.CellRendererCombo(), text = N, model = M) 

. 또는 모델 컬럼에서 다른 특성을 바인딩하는 다른 방법을 사용하십시오.

그런 다음 첫 번째 렌더러의 changed 신호에 연결하십시오. 콜백에서 두 번째 렌더러의 콤보 (즉, M 열의 값)에 사용되는 모델을 변경해야합니다. 동일한 모델을 여러 행에 사용할 수 있습니다. 즉, 하나는 숫자를, 하나는 문자를, 다른 하나는 더 만들지 않고 사용할 수 있습니다. 그러나 확실하지 않습니다. 즉, 콜백 (X 첫 번째 콤보의 값으로 열입니다, store 메인 gtk.ListStore입니다)이 유사 수 :

def combo1_changed (combo, path, iter): 
    main_iter = store.get_iter (path) 
    selected = store.get_value (main_iter, X) 
    if selected == 'Alphabet': 
     store.set_value (main_iter, M, alphabet_list_store) 
    elif selected == 'Numbers': 
     store.set_value (main_iter, M, number_list_store) 
    ... 
+0

닫기, cursor_changed 연결하는 데 필요한, 그리고 핸들러 기반의 내용을 변경 누군가가 행을 선택할 때마다 열에. –