我想要的基本上是一个普通的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'
。
有更简单的方法吗?
答案 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)