如何在npyscreen表单上指定按钮的焦点顺序?

问题描述

我想使用Python作为文本UI创建一个像应用程序这样的向导。为此,我目前使用npyscreen库,因为它已经提供了方便的表单和小部件。为了制作向导页面,我将FormBaseNew子类化,并在底部添加了三个按钮“ Prev”,“ Next”,“ Cancel”。

Base wizard form

但是,创建的顺序显然决定了小部件焦点如何在按钮之间导航。按照此按钮顺序,“上一个”按钮将是第一个。我可以先添加“下一步”按钮,然后通过指定表单上的按钮位置,将“上一步”按钮保留在左侧。这将保留按钮的自然顺序或直观顺序(上一个,下一个,取消)。然后,“下一个”按钮将是第一个获得焦点的按钮,但是按右箭头键会将焦点移到“上一个”按钮的左侧,然后移到最右边的“取消”按钮。而且我觉得这太奇怪了。

稍后该表单上将有更多小部件,当有人到达这些按钮时,我希望首先将“下一步”按钮聚焦,并且仍然可以按向左箭头转到“上一步”。那么,有什么方法可以设置认按钮或以其他方式实现此目的?

以下是一些示例代码

import npyscreen as nps


class WizardForm(nps.FormBaseNew):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        p = self.add_widget(nps.ButtonPress,name='Prev',relx=-30,rely=-2,use_max_space=True,when_pressed_function=self.on_prev)
        n = self.add_widget(nps.ButtonPress,name='Next',relx=-24,when_pressed_function=self.on_next)
        c = self.add_widget(nps.ButtonPress,name='Cancel',relx=-18,when_pressed_function=self.on_cancel)
        self._controls = [p,n,c]
        self.next_form_id = kwargs['next_form_id']

    def afterEditing(self):
        self.parentApp.setNextForm(self.next_form_id)

    def on_prev(self):
        pass

    def on_next(self):
        self.parentApp.switchFormNow()  # for demo

    def on_cancel(self):
        pass


class TextUiWizard(nps.NPSAppManaged):
    def onStart(self):
        self.addForm('MAIN',WizardForm,name='Welcome',next_form_id='second')
        self.addForm('second',name='Middle',next_form_id='last')
        self.addForm('last',name='Finished',next_form_id=None)


if __name__ == '__main__':
    TextUiWizard().run()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)