簡體   English   中英

使用Jython和Swing處理事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM