Joo*_*kka 8 python java user-interface swing jython
我正在使用来自Jython的Swing制作GUI.事件处理似乎从Jython特别优雅,只是设置
JButton("Push me", actionPerformed = nameOfFunctionToCall)
Run Code Online (Sandbox Code Playgroud)
但是,在课堂上尝试同样的事情变得困难.天真的尝试
JButton("Push me", actionPerformed = nameOfMethodToCall)
Run Code Online (Sandbox Code Playgroud)
要么
JButton("Push me", actionPerformed = nameOfMethodToCall(self))
Run Code Online (Sandbox Code Playgroud)
从类的GUI构造方法不起作用,因为要调用的方法的第一个参数应该是self,以便访问类的数据成员,另一方面,它不可能通过通过AWT事件队列的事件处理程序的任何参数.唯一的选择似乎是使用lambda(在http://www.javalobby.org/articles/jython/上建议),结果是这样的:
JButton("Push me", actionPerformed = lambda evt : ClassName.nameOfMethodToCall(self))
Run Code Online (Sandbox Code Playgroud)
它有效,但优雅已经消失.所有这一切只是因为被调用的方法需要从某个地方进行自引用.还有其他方法吗?
jfs*_*jfs 11
JButton("Push me", actionPerformed=self.nameOfMethodToCall)
Run Code Online (Sandbox Code Playgroud)
以下是您引用的文章中的修改示例:
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()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2567 次 |
最近记录: |