PyQtを使用していて、文字列のリストに基づいてメニューを作成したいとします。Pythonの動的関数生成
問題は、私は「addAction」を呼び出したいとき、それは引数を取りません(各文字列の)コールバック機能を必要とすることです。
単純なメニューの場合、これは問題ありません。
menu.addAction("Open", self.open)
menu.addAction("Exit", self.quit)
しかし、私は単なる関数を使用して、引数として 'アクション文字列'を渡したいと考えています。
Pythonはこのような何か行うことができます場合、私は疑問に思って:ここで
def f(x, y):
print x + 2*y
# These 2 variables are of type: <type 'function'>
callback1 = f
callback2 = f(x=7, *)
# NB: the line above is not valid python code.
# I'm just illustrating my desired functionality
print callback1(2,5) # prints 12
print callback2(5) # prints 17
は私のコードスニペットです:
def printParam(parameter):
print "You selected %s" % parameter
# parameters = list of strings
menu_bar = QMenuBar()
menu = menu_bar.addMenu('Select Parameter')
for parameter in parameters:
# This line will not work because the action does not pass in
# any arguments to the function
menu.addAction(parameter, printParam)
任意の提案を大幅に
"閉鎖を使用する"。クロージャーは、単に囲みスコープ内のフリー変数をクローズする関数です。 –
@pst:いいえ、それは 'functools.partial'の存在を考えればホイールを再発明するでしょう。プラス "クロージャー"ははるかに広い概念です;) – delnan
@delan :)クロージャーはより広い概念であるとはどういう意味ですか? –