首页 > 解决方案 > (Npyscreen)如何在拾取小部件中实现功能?

问题描述

我对 npyscreen 应用程序有疑问,它可以隐式关闭或重新启动整个 LAN(我老师的小项目)。我创建了具有两个测试功能的拾取小部件,以检查应用程序是否正常工作:在此处输入图像描述

def test_1():
    if True:
        file = open("test_1.txt", "w")
        file.write("This file is created because option 1 had been activated")
        file.close()
    else:
        pass


def test_2():
    if True:
        file = open("test_2.txt", "w")
        file.write("This file is created because option 2 had been activated")
        file.close()
    else:
        pass


class RatScreen(npyscreen.ActionForm):
    def create(self):
        # elf.show_atx = 20
        self.show_aty = 4
        self.add(npyscreen.TitleFixedText, name="Description:", value="Remote Access Tool is small app designed to manage machines in local network")
        self.add(npyscreen.TitleFixedText, name="Active computers:", value=active_computers)
        self.nextrely += 1
        self.add(npyscreen.TitleSelectOne, max_height=4, value=[test_1(), test_2()], name="Choose option", values=["Option 1", "Option 2"], scroll_exit=True)

    def on_ok(self):
        ok_cancel = npyscreen.notify_ok_cancel("Are you sure you want to execute selected task?", "Warning", editw=2)
        if ok_cancel == True:
            self.parentApp.setNextForm(None)
        else:
            self.parentApp.setNextFormPrevious

    def on_cancel(self):
        self.parentApp.setNextForm(None)


class RAT(npyscreen.NPSAppManaged):
    def onStart(self):
        self.addForm('MAIN', RatScreen, name='Remote Access Tool v1.1', lines=20)


if __name__ == '__main__':
    active_computers = []
    # ping()
    app = RAT().run()

问题出现了,每次启动应用程序后,它都会立即创建两个文件。在此处输入图像描述

有人可以帮我解决这个问题吗?谢谢!

标签: pythonnpyscreen

解决方案


class RatScreen(npyscreen.ActionForm):
    def create(self):
        # elf.show_atx = 20
        self.show_aty = 4
        self.add(npyscreen.TitleFixedText, name="Description:", value="Remote Access Tool is small app designed to manage machines in local network")
        self.add(npyscreen.TitleFixedText, name="Active computers:", value=active_computers)
        self.nextrely += 1
        self.option = self.add(npyscreen.TitleSelectOne, max_height=4, name="Choose option", values=["Option 1", "Option 2"], scroll_exit=True)

    def on_ok(self):
        ok_cancel = npyscreen.notify_ok_cancel("Are you sure you want to execute selected task?", "Warning", editw=2)
        if ok_cancel:
            if self.option.values[self.option.value[0]] == "Option 1":
                test_1()
            else:
                test_2()
            self.parentApp.setNextForm(None)
        else:
            self.parentApp.setNextFormPrevious

    def on_cancel(self):
        self.parentApp.setNextForm(None)

问题是您将两个选项都设为 True 作为默认值(value=[test_1(), test_2()])。希望能帮助到你。


推荐阅读