2017-01-06 9 views
0

基本的にnpyscreen.Formは普通ですが、 "OK"ボタンで "Exit"と言いたいと思います。npyscreenで終了ボタンを作成するにはどうすればよいですか?

あなたが定期的にnpyscreen.Formでボタンの名前を変更することはできませんように見えるので、私はnpyscreen.ButtonPressをサブクラス化しようとした:

import npyscreen 

class ExitButton(npyscreen.ButtonPress): 
    def whenPressed(self): 
     self.parentApp.setNextForm(None) 

class MainForm(npyscreen.FormBaseNew): 
    def create(self): 
     self.exitButton = self.add(ExitButton, name="Exit", relx=-12, rely=-3) 

class App(npyscreen.NPSAppManaged): 
    def onStart(self): 
     self.addForm("MAIN", MainForm, name="My Form") 

if __name__ == "__main__": 
    app = App().run() 

、ボタンが現れますが、あなたはそれをクリックしたとき'ExitButton' object has no attribute 'parentApp'が得られます。

これを行う簡単な方法はありますか?

答えて

1

エドウィンの権利、self.parent.parentAppないself.parentAppを使用しています。

setNextForm(None)の代わりにswitchForm(None)を使用するとアプリを終了できます。

def whenPressed(self): 
    self.parent.parentApp.switchForm(None) 

参照:post by npyscreen's authorが期待通りに動作することを確認します。

+0

テストしましたか? – eyllanesc

+0

はい、あなたの答えと同じ振る舞いをします – davedwards

+0

self.parentAppを使用するのはいつですか、いつself.parent.parentAppですか? [Documentation](http://npyscreen.readthedocs.io/application-objects.html?highlight=parentapp)にはself.parentAppが記述されていますが、self.parent.parentAppの記述はありません。 – John

1

これは最も洗練された解決策ではありませんが、まずはsetNextFormからExitButtonにアクセスしてください。self.parent.parentApp.setNextForm(None)。これを修正してもうまくいきません。私はsys.exit(0)を使って終了しました。

import npyscreen 
import sys 


class ExitButton(npyscreen.ButtonPress): 
    def whenPressed(self): 
     sys.exit(0) 

class MainForm(npyscreen.FormBaseNew): 
    def create(self): 
     self.exitButton = self.add(ExitButton, name="Exit", relx=-12, rely=-3) 


class App(npyscreen.NPSAppManaged): 
    def onStart(self): 
     self.addForm("MAIN", MainForm, name="My Form") 

if __name__ == "__main__": 
    app = App().run() 
関連する問題