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

Python 如何在npyscreen中创建退出按钮?,python,npyscreen,Python,Npyscreen,我想要的基本上是一个常规的npyscreen.Form,但我希望“OK”按钮显示“Exit” 在常规的npyscreen.Form中,似乎无法更改按钮的名称,因此我尝试将npyscreen.ButtonPress子类化: import npyscreen class ExitButton(npyscreen.ButtonPress): def whenPressed(self): self.parentApp.setNextForm(None) class MainF

我想要的基本上是一个常规的npyscreen.Form,但我希望“OK”按钮显示“Exit”

在常规的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”对象没有属性“parentApp”


有更简单的方法吗?

这不是最优雅的解决方案,但它很有效,首先要从
ExitButton
访问
setNextForm
,您应该按如下操作:
self.parent.parentApp.setNextForm(无)
。即使纠正这一点也不起作用,我使用
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()

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

def whenPressed(self):
    self.parent.parentApp.switchForm(None)
要退出应用程序,请使用
switchForm(None)
而不是
setNextForm(None)

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

参考:a确认此功能按预期工作。

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

确定按钮\u TEXT='YourCustomNameOKButton'

参考:表单类的内置帮助。

使用
self.parent.parentApp
,因为
ExitButton
位于
表单
中,表单可以访问
parentApp

使用
switchForm()
代替
setNextForm()


您测试过它吗?是的,它的行为与您的回答相同。何时使用self.parentApp,何时使用self.parentApp?提到self.parentApp,但我没有看到任何提到self.parent.parentApp的内容。这对我来说很有效(
sys.exit(0)
)。我原以为某些ncurses清理操作在这种情况下可能不起作用,但终端似乎重置为其原始设置。。。