(Npyscreen) Как реализовать функции в комплектации виджета? - PullRequest
0 голосов
/ 20 ноября 2018

У меня проблема с приложением npyscreen, которое неявно сможет отключить или перезагрузить всю локальную сеть (небольшой проект для моего учителя).Я создал виджет комплектации с двумя тестовыми функциями, чтобы проверить, правильно ли работает приложение: 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 голосов
/ 22 января 2019
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 ()] ). Надеюсь, поможет.

...