微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在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 举报,一经查实,本站将立刻删除。