1

我当前的项目使用 aGtk.TreeView来显示 a 的内容,ListView每行有四个字段,两个字符串,anint和 a 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 行之一中的数据设置选择对象的所有努力都失败了。我的模型中的intandbool值不能像字符串值一样编码,而且我找不到任何关于如何将多列 TreeView 行的所有值设置为单个选择对象的示例。谁能指出一些相关的例子或文档?

4

1 回答 1

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

请仔细检查您以这种方式获得的数据。如果你不这样做,一些特制的字符串(比如说从另一个程序传递过来的)可能会使你的程序崩溃或更糟。

于 2012-10-23T15:55:16.923 回答