0

私は Python とツイストを使用して snmp 管理プログラムを作成しています。その一部では、クライアント側のいくつかのボタンをリモート snmp set メソッドにバインドする必要があります。これはパースペクティブ ブローカーで処理されます。

for item in devicevars[current+" buttons"]:
    ttk.Label(buttonframe, text=item + ":").grid(column=1, row=i2, sticky=(E))
    ttk.Button(buttonframe,width = 3,textvariable=guivars["%s %s" %(current, 
                                item)],command=remoteButton(current, item)).grid(column=2, row=i2, sticky=(W))
    i2 = i2+1


def remoteButton(dname, value):

    rbutton= pbfactory.getRootObject()
    rbutton.addCallback(lambda object: object.callRemote("SNMP", dname, value))
    rbutton.addErrback(lambda reason: 'error: '+str(reason.value))

問題は、このコードにより、クライアントが起動するとすぐにリモート メソッドが起動されることです。なぜこれが起こっているのか知っている人はいますか?

4

1 に答える 1

0

commandオプションTkinter(したがってttk)は、ボタンがクリックされたときに呼び出される呼び出し可能なオブジェクトです。

渡すcommand=remoteButton(...)ことにより、すぐに呼び出しremoteButton、その結果をcommandオプションとして渡します。

command代わりに、実行時にを呼び出すオプションを渡しますremoteButton

これを行う方法は次のとおりです。

ttk.Button(buttonframe,width = 3,
           textvariable=guivars["%s %s" %(current, item)],
           command=lambda: remoteButton(current, item))

つまり、その前にを貼り付けるlambda:と、単に呼び出すのではなく、呼び出す関数が得られます。

于 2012-10-24T08:15:00.220 に答える