2012-10-22 5 views
1

나의 현재 프로젝트는 행 당 네 개의 필드, 두 개의 문자열, intbooleanListView의 내용을 표시하는 Gtk.TreeView을 사용하여 삭제합니다. TreeView에서 행 드래그 앤 드롭 재배치를 구현하려고합니다. 드래그 앤 드롭 작업의 실행 취소/다시 실행을 구현할 수있을뿐 아니라 모델에서 데이터 삽입 및 삭제에 대한 몇 가지 컨트롤을 원하기 때문에 내장 드래그 앤 드롭에 TreeView.set_reorderable(True)을 단순히 사용하고 싶지 않습니다. . 나는 파이썬 3.2와 PyGObject 3을 사용하고있다.어떻게 트 리뷰 드래그에 대한 GtkSelection에 여러 항목을 설정하고

메서드는 두 개의 문자열, 하나의 int 및 하나의 bool 행을 구성하는 선택 데이터 객체를 설정하는 방법을 파악하고있다. 드래그 앤 드롭. 내가 찾을 수 있었던 모든 예제 코드는 다음과 같이 뭔가 선택으로 설정 얻을 문자열 값을 하나의 열이 트 리뷰를 포함한다 : 데이터에서와 선택 객체를 설정하는

def drag_data_get_data(self, treeview, context, selection, target_id, etime): 
    treeselection = treeview.get_selection() 
    model, iter = treeselection.get_selected() 
    data = bytes(model.get_value(iter, 0), "utf-8") 
    selection.set(selection.get_target(), 8, data) 

내 모든 노력을 내 TreeView 행 중 하나가 실패했습니다. 내 모델의 intbool 값은 문자열 값처럼 인코딩 할 수 없으며 다중 열 TreeView 행의 모든 ​​값을 단일 선택 개체로 설정하는 방법에 대한 예제를 찾을 수 없습니다. 누구든지 몇 가지 관련 예제 나 문서를 가르쳐 줄 수 있습니까?

답변

1

4 개 값의 튜플을 단일 문자열로 인코딩 할 수 있습니다. json를 가져 오는 당신을위한 옵션이없는 경우 당신은 또한 자신의 인코딩 방식을 사용할 수

import json 
data = ["string", "string2", True, 20] 
string_variable = json.dumps(data) 
# 
# now pass string_variable through drag and drop 
# 
returned = json.loads(string_variable) 

: 쉬운 방법은 그것에 대해 json을 사용하는 것입니다.

이런 식으로 데이터를 신중하게 확인하십시오. 그렇지 않으면 특수 제작 된 일부 문자열 (다른 프로그램에서 전달됨)이 프로그램에 오류를 발생 시키거나 악화시킬 수 있습니다.

+0

감사합니다. Json은 내가 필요한 것을했습니다. 드래그 앤 드롭은 "예상대로"정확하게 작동합니다. 위생 점검에 대한 경고 주셔서 감사합니다. 드래그 소스와 드래그 대상에 대한 관련 TargetEntry의 드래그 앤 드롭을 동일한 위젯으로 제한하고 있습니다. 거의 모든 악의적 인 사건을 예방해야합니다. – knutsondc

+0

네, 충분히 안전해야한다고 생각합니다. 아마도 내 대답을 허용 된 것으로 표시해야합니다. 스택 오버 플로우에 대해 감사의 말을하는 방법입니다. :-) –