0

需要通过循环动态实例化 gtk.TreeViewColumn 类型的对象for,如本例所示:http ://dpaste.com/hold/789277/

上面代码的输出是:

tvc_0 = gtk.TreeViewColumn('id', gtk.CellRendererText(), text = 0)
tvc_1 = gtk.TreeViewColumn('Aspecto', gtk.CellRendererText(), text = 1)
tvc_2 = gtk.TreeViewColumn('Impactos', gtk.CellRendererText(), text = 2)

我需要将output上述字符串的source code

已经尝试使用 getattr,但我无法获得结果。有人可以帮助我吗?

拥抱!胡利亚诺

4

2 回答 2

0

关于不使用邪恶 exec/eval 的可能解决方案:

tuple_val = (
    ('id', gtk.CellRendererText(), 0),
    ('Aspectos', gtk.CellRendererText(), 1),
    ('Impactos', gtk.CellRendererText(), 2),
)

def tree_view_factory(id, renderer, text):
    return gtk.TreeViewColumn(id, renderer, text=text)

tvc_0, tvc_1, tvc_2 = map(tree_view_factory, tuple_val)
于 2012-08-21T02:08:18.000 回答
-1

您可以使用exec语句从字符串动态执行源代码。例如:

exec """
    tvc_0 = gtk.TreeViewColumn('id', gtk.CellRendererText(), text = 0)
    tvc_1 = gtk.TreeViewColumn('Aspecto', gtk.CellRendererText(), text = 1)
    tvc_2 = gtk.TreeViewColumn('Impactos', gtk.CellRendererText(), text = 2)
"""

或在您链接的脚本中:

dic = {'0':'id',  '1':'Aspecto',  '2':'Impacto'}
for coluna in range(0, len(dic.keys())):
    exec "tvc_"+str(coluna)+"=gtk.TreeViewColumn('"+dic[str(coluna)]+"', gtk.CellRendererText(), text="+str(coluna)+")"

要小心,任意代码字符串的执行可能会导致严重的安全问题。

于 2012-08-21T00:42:09.090 回答