python - (Npyscreen)如何在拾取小部件中实现功能?
问题描述
我对 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)
问题是您将两个选项都设为 True 作为默认值(value=[test_1(), test_2()])。希望能帮助到你。
推荐阅读
- c++ - C++ 程序,其中,从用户读取一个六位整数作为输入,并通过 for/While 循环输出其每个数字
- angular - “AppComponent”类型上不存在属性“英雄”
- windows-terminal - 查找 Microsoft Windows 终端的像素着色器编译日志
- anylogic - 如何停止或暂停并重新启动基于代理的图表中的“服务延迟”或“延迟”块?
- mysql - 如何使用 0 值的 MySQL 获得最近 30 天的结果?
- r - 使用 ggh4x 包时可以调整不同标签区域的大小吗?
- c# - 如何在 Mac Os 上使用“https”而不是“http”在 localhost 上运行我的 .Net Web 应用程序
- java - Java socket模拟http请求的问题
- reactjs - React, availableForSale: true 为 true 时显示 Text
- mysql - 无法使用 MySQL 和 .NET 5.0 完成 dotnet ef 迁移添加。错误:无法加载文件或程序集