PyGTK - gtk.TreeViewColumn(动态实例化)

时间:2012-08-21 00:11:23

标签: python pygtk

需要通过循环for动态实例化gtk.TreeViewColumn类型的对象,如下例所示: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,我无法获得结果。有人能帮帮我吗?

拥抱! Juliano的

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:-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)+")"

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