(Npyscreen) 如何将功能实现到采摘小部件中?

(Npyscreen) How to implement functions into picking widget?

我的 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()

然后问题就出现了,每次启动应用程序后,它都会立即创建两个文件。

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

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)

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