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

时间:2018-11-19 22:16:21

标签: python npyscreen

我的npyscreen应用程序有问题,它可以隐式关闭或重新启动整个LAN(我的老师的小项目)。我创建了具有两个测试功能的拣选小部件,以检查应用程序是否正常运行:enter image description here

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

出现了问题,每次启动该应用程序后,它将立即创建两个文件。 enter image description here

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

1 个答案:

答案 0 :(得分:1)

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()] )。希望能帮助到你。