Java 与Jython&;摆动
我正在使用Jython的Swing制作GUI。Jython的事件处理似乎特别优雅,刚刚设置Java 与Jython&;摆动,java,python,user-interface,swing,jython,Java,Python,User Interface,Swing,Jython,我正在使用Jython的Swing制作GUI。Jython的事件处理似乎特别优雅,刚刚设置 JButton("Push me", actionPerformed = nameOfFunctionToCall) 然而,在一个类中尝试同样的事情会变得困难。天真的尝试 JButton("Push me", actionPerformed = nameOfMethodToCall) 或 从GUI构造类的方法不起作用,因为要调用的方法的第一个参数应该是self,以便访问类的数据成员,另一方面,不可能通
JButton("Push me", actionPerformed = nameOfFunctionToCall)
然而,在一个类中尝试同样的事情会变得困难。天真的尝试
JButton("Push me", actionPerformed = nameOfMethodToCall)
或
从GUI构造类的方法不起作用,因为要调用的方法的第一个参数应该是self,以便访问类的数据成员,另一方面,不可能通过AWT事件队列将任何参数传递给事件处理程序。唯一的选择似乎是使用lambda(如建议的那样),其结果如下:
JButton("Push me", actionPerformed = lambda evt : ClassName.nameOfMethodToCall(self))
它起作用了,但优雅已经消失了。所有这些仅仅是因为被调用的方法需要来自某个地方的自引用。还有别的办法吗
JButton("Push me", actionPerformed=self.nameOfMethodToCall)
下面是您引用的文章中的一个修改示例:
from javax.swing import JButton, JFrame
class MyFrame(JFrame):
def __init__(self):
JFrame.__init__(self, "Hello Jython")
button = JButton("Hello", actionPerformed=self.hello)
self.add(button)
self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
self.setSize(300, 300)
self.show()
def hello(self, event):
print "Hello, world!"
if __name__=="__main__":
MyFrame()
哇,太简单了!谢谢这种方法似乎同时向方法发送自引用和事件,因此需要将其定义为:def nameOfMethodToCall(self,evt),这很好@JoonasPulakka:如果你想调用一个类方法,只需使用
classname.method
而不是self.method
from javax.swing import JButton, JFrame
class MyFrame(JFrame):
def __init__(self):
JFrame.__init__(self, "Hello Jython")
button = JButton("Hello", actionPerformed=self.hello)
self.add(button)
self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
self.setSize(300, 300)
self.show()
def hello(self, event):
print "Hello, world!"
if __name__=="__main__":
MyFrame()