我当前的项目使用Gtk.TreeView
来显示ListView
的内容,每行有四个字段,两个字符串,一个int
和一个boolean
。我正在尝试在TreeView中实现拖放行的重新排列。我不想简单地使用TreeView.set_reorderable(True)
进行内置拖放操作,因为我希望能够控制从模型中插入和删除数据,以及能够实现撤消/重做拖放操作。我正在使用Python 3.2和PyGObject 3。
我现在遇到的问题是弄清楚我的drag_data_get
方法如何用两个字符串设置选择数据对象,一个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行中的数据设置选择对象的所有努力都失败了。我的模型中的int
和bool
值不能像字符串值一样编码,我找不到如何将多列TreeView行的所有值设置为单个选择的任何示例宾语。任何人都可以向我指出一些相关的例子或文档吗?
答案 0 :(得分: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
,也可以使用自己的编码方案。
请仔细检查您获得的数据。如果你不这样做,一些特制的字符串(比如从另一个程序传来)可能会使程序崩溃或更糟。