如何在npyscreen中创建退出按钮?

时间:2017-01-06 22:19:41

标签: python npyscreen

我想要的基本上是一个普通的npyscreen.Form,但我希望“OK”按钮说“退出”。

看来您无法更改常规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'

有更简单的方法吗?

4 个答案:

答案 0 :(得分:3)

Edwin是的,使用self.parent.parentApp而不是self.parentApp

要退出应用,请使用switchForm(None)代替setNextForm(None)

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

参考:post by npyscreen's author确认这可以按预期工作。

答案 1 :(得分:2)

这不是最优雅的解决方案,但它有效,首先要从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()

答案 2 :(得分:1)

有一种方法可以更改“确定”按钮的名称。在所需的表单类中修改属性

OK_BUTTON_TEXT='YourCustomNameOKButton'

参考:FORM类的内置帮助。

答案 3 :(得分:0)

使用self.parent.parentApp,因为ExitButton位于Form内部,并且Form可以访问parentApp

使用switchForm()代替setNextForm()

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