npyscreen динамически изменяет значение виджета - PullRequest
0 голосов
/ 01 мая 2020

Ситуация такова: мое приложение работает в другом потоке, а основная программа - в другом. Я хочу изменить значения в моих виджетах npyscreen на главном экране. Я слышал о событиях, но по некоторым причинам пример кода не работает.

Просто для примера. Программа, которая копирует файлы: два потока, один для приложения npyscreen и один для основного l oop. Всякий раз, когда файл внутри основного l oop завершается, копирование счетчика в приложении должно увеличиваться.

import os
import shutil
import npyscreen
import time
from concurrent.futures import ThreadPoolExecutor

def main():
    app = App()
    exec_thread = ThreadPoolExecutor(max_workers=2)
    thread1 = exec_thread.submit(app.run)
    thread2 = exec_thread.submit(main)
    thread2.result()
    time.sleep(2)

def process():
    cwd = os.getcwd()
    dst = f"{cwd}/test2"
    file_list = os.listdir(f"{cwd}/test")

    for file in file_list:
        shutil.copy(f"{cwd}/test/{file}", dst)
        # --------------------------------
        # implement a function that increments the text in the form
        # --------------------------------
    return


class Form(npyscreen.ActionForm):
    def create(self):
        self.cpfiles = self.add(npyscreen.TitleFixedText, name="copied", editable=False, value=str(0))
        self.display()

    def on_ok(self):
        self.parentApp.switchForm(None)


class App(npyscreen.NPSAppManaged):
    def onStart(self):
        self.addForm('MAIN', Form, name="test")

    def onCleanExit(self):
        npyscreen.notify_wait("Goodbye!")


if __name__ == '__main__':
    main()

Я знаю, что это слишком просто, но я не могу найти лучшего примера.

Пример кода, который я пробовал: https://github.com/npcole/npyscreen/blob/master/TESTING-EVENT-APP.py

...