情况是这样的:我的应用程序在不同的线程中运行,而主程序在另一个线程中运行。我想从主屏幕更改我的 npyscreen 小部件中的值。我听说过事件,但由于某些原因,示例代码不起作用。
举个例子。一个复制文件的程序:两个线程,一个用于 npyscreen 应用程序,一个用于主循环。每当主循环内的文件完成复制应用程序中的计数器时,应该上升。
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