[英]Event handling with Jython & Swing
我正在使用來自Jython的Swing制作GUI。 事件處理似乎從Jython特別優雅,只是設置
JButton("Push me", actionPerformed = nameOfFunctionToCall)
但是,在課堂上嘗試同樣的事情變得困難。 天真的嘗試
JButton("Push me", actionPerformed = nameOfMethodToCall)
要么
JButton("Push me", actionPerformed = nameOfMethodToCall(self))
從類的GUI構造方法不起作用,因為要調用的方法的第一個參數應該是self ,以便訪問類的數據成員,另一方面,它不可能通過通過AWT事件隊列的事件處理程序的任何參數。 唯一的選擇似乎是使用lambda(如http://www.javalobby.org/articles/jython/所建議的),結果是這樣的:
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.