1

変数名で関数を定義しようとしています。

名前はデータベースから取得されます。すべての名前について、ボタンを定義し、個別の処理を行いたい:

title=['BNL','CE']
for i in range(0,len(title)):
    panelvpu.add(Button(title[i]))


for i in range(0,len(title)):
    eval('def onButtonClick'+title[i]+'(self, event):')
    eval('    Window.alert("Yes")')

ボタンの定義は問題ありませんが、定義された関数でのイベントの処理でエラーが発生します

im1 SyntaxError: at index 4 in "def onMenu1Item1(self): 
Window.alert("Item 1 selected")": expected ';', got 'onMenu1Item1'

フィードバックの後、これを次のように変更しました

    title=['BNL','CE']
    for t in title : panelvpu.add(Button(t))

for t in title:        
    def_code = "print t"
    exec(def_code)

気持ちをつかむだけです。python では、これで問題なく動作します。しかし、私はパジャマを使用しており、最後のコードで次のエラーが発生します

 im1 TypeError: iter is undefined

pajamas はまだ eval() と exec() をサポートしていないようです。

リチャード

4

1 に答える 1

9

ここにはいくつかの問題があります。

1)evalステートメントを実行するためではなく、式を評価するためのものです。

2)exec関数全体を 1 つexecにまとめる必要があり、別の行に分割する必要はありません。

3) ボディに何を持たせたいかによって、関数を作成するもっと簡単な方法があります。本当にやりたいことを教えてください。

4) ループは次のようにはるかに単純ですfor t in title: blah blah t

于 2011-10-07T19:00:32.807 に答える