3

我想要的基本上是一个常规的 npyscreen.Form,但我希望“确定”按钮说“退出”。

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

4 回答 4

4

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

要退出应用程序,请switchForm(None)使用setNextForm(None).

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

参考:npyscreen 的作者的一篇文章证实了它按预期工作。

于 2017-01-07T01:11:14.003 回答
3

它不是最优雅的解决方案,但它可以工作,首先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()
于 2017-01-07T00:27:55.577 回答
1

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

OK_BUTTON_TEXT='YourCustomNameOKButton'

参考:FORM 类的内置帮助。

于 2019-04-26T17:35:48.533 回答
0

use self.parent.parentAppsinceExitButton驻留在Form, 和 Form 可以访问parentApp

使用switchForm()而不是setNextForm()

class ExitButton(npyscreen.ButtonPress):
    def whenPressed(self):
        self.parent.parentApp.switchForm(None)
于 2019-08-29T00:34:55.780 回答