1

我正在使用npyscreen构建一个简单的应用程序来构建精美的菜单。正如文档所说,我使用switchForm()检索到的方法self.parentApp来更改当前显示的表单。但是,当被调用时,splash.show_splash()什么都没有发生(应用程序退出,因为setNextFormis None)。

如何正确切换表格?

源代码 :

class splash(npyscreen.Form):
    def afterEditing(self):
        self.parentApp.switchFormPrevious()
    def create(self):
        self.new_splash = self.add(npyscreen.Pager, values=BANNER)

class whatDo(npyscreen.FormBaseNewWithMenus):
    def afterEditing(self):
        self.parentApp.setNextForm(None)

    def create(self):
        self.add(npyscreen.TitlePager, name="Hello")
        self.m1 = self.new_menu(name="File", shortcut=None)
        self.m1.addItemsFromList([
            ("M1-A", self.open),
            ("M1-B",   self.new),
            ("M1-C", self.exit_application),
        ])
        self.m2 = self.new_menu(name="Edit", shortcut=None)
        self.m2.addItemsFromList([
            ("M2-A", self.open),
            ("M2-B",   self.new),
        ])
        self.m3 = self.new_menu(name="Other", shortcut=None)
        self.m3.addItemsFromList([
            ("M3-A", self.open),
            ("M3-A",   self.show_splash)
        ])
    def show_splash(self):
        self.parentApp.switchForm('SPLASH')

    def exit_application(self):
        self.parentApp.switchForm(None)  


    def open(self):
        pass
    def new(self):
        pass

class MyApplication(npyscreen.NPSAppManaged):
    def onStart(self):
        self.addForm('MAIN', whatDo, name='Main Menu')
        self.addForm('SPLASH', splash, lines=30, name='Splash Form')
if __name__ == '__main__':
   TestApp = MyApplication().run()
4

1 回答 1

1

实际上,我通过执行以下操作摆脱了这个问题:

class Form1(npyscreen.Form):
    def create(self):
        self.name = "I'm the first form! I am so happy!"

    def afterEditing(self):
        self.parentApp.setNextForm("second")

class Form2(npyscreen.Form):
    def create(self):
        self.name = "Im the second form!"

    def afterEditing(self):
        self.parentApp.setNextForm("MAIN")

class App(npyscreen.NPSAppManaged):
    def onStart(self):
        self.registerForm("MAIN", Form1())
        self.registerForm("second", Form2())

有了这个,您可以通过单击众所周知的“确定”按钮在这两种形式之间切换。我的意思是,它对我有用。

编辑#1:对不起,我在您提出要求 10 个月后回答了您,但我刚刚开始使用npyscreen

编辑#2:我必须说,npyscreen是使用 UI 创建 python 控制台应用程序的好方法。在我沉迷于 Python 的日子里,我尝试自己做类似的事情,但你可能会猜到它是如何进行的......

于 2020-11-23T21:16:42.333 回答