gpt4 book ai didi

python - Jython Swing : Passing more than self and event on a button press

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:03 25 4
gpt4 key购买 nike

我正在 Jython 中循环创建几个 Swing JButtons 按钮。按下时,每个按钮都应调用相同的函数,但具有一个不同的参数。我在传递自身和事件之外的任何参数时遇到问题。

这个有效:

for x in range(0,3):
name = JButton(str(x))
name.actionPerformed = self.foo

def foo(self, event):
print "I work."

事件以某种方式神奇地传递给了方法。

这不是:

for x in range(0,3):
name = JButton(str(x))
name.actionPerformed = self.foo(x)

def foo(self, event, number):
print "I don't work."
print str(number)

我看到的问题是,当我添加任何参数时,我不再传递一个事件,我最终得到一个错误,告诉我“foo() 正好需要 3 个参数(给定 2 个)” .我明白了,但如何从按钮中提取事件?

最佳答案

回调仅接受调用它的代码(GUI 工具包)传入的内容。如果您想传入更多内容,但又无法说服所述调用者传递额外的内容,那您就倒霉了。

但幸运的是,有一个漏洞:您可以传递任意可调用对象,并且可以构造部分函数,​​这些函数是包装另一个函数的函数,记住在调用它们时要传递的额外参数。

import functools

def callback(x, y):
return x + y

g = functools.partial(callback, y=3)
g(2) #=> 5

奇怪的参数顺序存在一些问题(例如,如果第一个参数是通过关键字参数提供的,则您不能轻易地使用位置参数调用 partial ),但是您的用例(将参数添加到参数列表的末尾)应该工作得很好。您只需要使用关键字参数。

关于python - Jython Swing : Passing more than self and event on a button press,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8084679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com