2012-05-25 8 views
3

Gtk3의 GtkTreeRowReference() 함수를 아무런 성공없이 호출하려고합니다. 여러 개의 레코드를 ListStore에서 삭제하려면 관련된 TreeView의 선택을 사용하여 여러 모드로 설정하려고합니다. 각 ListStore 항목을 가리키는 곳에 TreeRowReference을 저장하고 ListStore 항목을 삭제하려면 해당 항목을 선택 항목에서 이전에 도달 한 ListStore 항목으로 업데이트해야하기 때문에 해당 항목을 삭제하려고합니다. 나는 PyGtk 2에서 TreeRowReferences을 사용하는 것에 대한 많은 언급을 발견했으며, PyGObject의 튜토리얼은 실제 사용법을 언급하고 있지만 실제 예제는 제공하지 않습니다. 나는 성공적으로 GtkTreeRowReference()을 호출하는 많은 방법을 시도했다. 예를 들어 :Python에서 Gtk3 GtkTreeRowReference를 사용하는 방법

hit_rows = [] 
for row in range(len(self.selection.get_selected_rows()): 
    hit = self.selection.get_selected_rows()[row] 
    hit_row = Gtk.TreeRowReference(liststore, hit) 
    hit_rows.append(hit_row) 

이 치명적인 오류 메시지를 생성합니다 : "TypeError: function takes at most 0 arguments (2 given)" 내 프로그램은 Gtk.TreeRowReference 라인을 칠 때. 선택 행에 이미 ListStore에 대한 참조가 포함되어 있으므로 선택 행만 인수로 다시 시도했지만 함수가 여전히 0 인수를 주장하고 1 인수를 전달하려고했으나 불만을 표시했습니다.

hit_rows = [] 
for row in range(len(self.selection.get_selected_rows())): 
    hit = self.selection.get_selected_rows()[row] 
    hit_row = hit.GtkTreeRowReference() 
    hit_rows.append(hit_row) 

이러한 노력은 파이썬 TreeRowReference, Gtk_TreeRowReference 및 여러 가지 다른 변화로 호출 다양한 "AttributeError: 'ListStore' object has no attribute 'GtkTreeRowReference'."에 대해 불평 같은 오류 메시지가 발생하는 자극 :

나는이 같은 일을 시도했다.

PyGObject/Gtk3에서 Gtk.TreeRowReference을 사용하는 방법에 대한 단서를 남겨주 실 수 있습니까? Gtk에 익숙하지 않은 상대적으로 새로운 경험이없는 Python 프로그래머로서 의심 할 여지없이 숨막히는 것을 간과 한 적이 있지만 많은 인터넷 검색을 마친 후에도 난처한 상황입니다.

+0

get_selected_rows() 문서를 참조하십시오. 반환 된 정보의 각 경로에 ctor를 사용해야하는 것 같습니다. – ergosys

+0

감사합니다, ergosys, 나는 그것을 조사 할 것입니다. – knutsondc

+0

get_selected_rows()가 반환 한 Gtk.TreePath 값을 얻을 수 있습니다. 내가 무엇을 할 수 있기를 바란다는 것은 그 반환 값을 사용하여 TreeModel의 내용을 변경하고자 할 때 문서가 제안한 것을 수행하는 것입니다. 즉 TreeRowReferences로 저장하면 아이템이 얻을 때 유효하게 유지됩니다. 삭제되거나 이동되었습니다. – knutsondc

답변

2

Gtk.TreeRowReference (PyGObject + GTK + 3)을 호출하는 대신 Gtk.TreeRowReference.new을 사용해야합니다. 예를 들어, 다음과 같이 사용할 수있다

selection = treeview.get_selection() 
model, paths = selection.get_selected_rows() 
refs = [] 
for path in paths: 
    refs.append(Gtk.TreeRowReference.new(model, path)) 

treeview 이전에 정의되어 있습니다. 그런 다음 같은과 나중에 한 번 확인 할 수 있습니다 마지막 부분에서

for ref in refs: 
    path = ref.get_path() 
    iter = model.get_iter(path) 
    value = model.get(iter, 0)[0] 
    print '(%s, %s)' % (path, value) 

, 난 당신이 모델의 첫 번째 열의 값을 얻으려면 가정합니다.

+0

도움이되는 답변에 감사드립니다. 나는 최근에 그것을 알아 차렸다. 그러므로 그것을 인정하는 것이 지연되었다. – knutsondc

관련 문제