如何在 npyscreen 中制作退出按钮?
How do I make an exit button in npyscreen?
我想要的基本上是一个常规的 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' object has no attribute 'parentApp'
。
有更简单的方法吗?
这不是最优雅的解决方案,但它确实有效,首先要从 ExitButton
访问 setNextForm
,您应该按如下方式进行: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()
Edwin 说得对,使用 self.parent.parentApp
而不是 self.parentApp
。
要退出应用程序,请使用 switchForm(None)
而不是 setNextForm(None)
。
def whenPressed(self):
self.parent.parentApp.switchForm(None)
参考:post by npyscreen's author 确认这按预期工作。
有一种方法可以更改 OK 按钮的名称。以所需形式修改 class 属性
OK_BUTTON_TEXT='YourCustomNameOKButton'
参考:FORM class.
的内置帮助
使用 self.parent.parentApp
,因为 ExitButton
驻留在 Form
中,并且表单可以访问 parentApp
使用 switchForm()
代替 setNextForm()
class ExitButton(npyscreen.ButtonPress):
def whenPressed(self):
self.parent.parentApp.switchForm(None)
我想要的基本上是一个常规的 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' object has no attribute 'parentApp'
。
有更简单的方法吗?
这不是最优雅的解决方案,但它确实有效,首先要从 ExitButton
访问 setNextForm
,您应该按如下方式进行: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()
Edwin 说得对,使用 self.parent.parentApp
而不是 self.parentApp
。
要退出应用程序,请使用 switchForm(None)
而不是 setNextForm(None)
。
def whenPressed(self):
self.parent.parentApp.switchForm(None)
参考:post by npyscreen's author 确认这按预期工作。
有一种方法可以更改 OK 按钮的名称。以所需形式修改 class 属性
OK_BUTTON_TEXT='YourCustomNameOKButton'
参考:FORM class.
的内置帮助使用 self.parent.parentApp
,因为 ExitButton
驻留在 Form
中,并且表单可以访问 parentApp
使用 switchForm()
代替 setNextForm()
class ExitButton(npyscreen.ButtonPress):
def whenPressed(self):
self.parent.parentApp.switchForm(None)