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 に答える