gpt4 book ai didi

python-curses - 使用 npyscreen 在表单之间传递值

转载 作者:行者123 更新时间:2023-12-01 14:18:18 27 4
gpt4 key购买 nike

我正在尝试在 python 中创建一个简单的 npyscreen curses 应用程序,它在一个屏幕上请求用户输入,然后在另一个屏幕上为用户验证它。

主要是为了理解如何在 npyscreen 中存储和检索值。我确信我遗漏了一些简单的东西,但我无法在文档中找到(或理解?)答案。

下面的示例代码不会正确传递值:

#!/usr/bin/env python3.5

import npyscreen as np

class EmployeeForm(np.Form):
def afterEditing(self):
self.parentApp.switchForm('CONFIRMFM')

def create(self):
self.myName = self.add(np.TitleText, name='Name')
self.myDepartment = self.add(np.TitleSelectOne, scroll_exit=True, max_height=3, name='Department', values = ['Department 1', 'Department 2', 'Department 3'])
self.myDate = self.add(np.TitleDateCombo, name='Date Employed')

class EmployeeConfirmForm(np.Form):
def afterEditing(self):
self.parentApp.setNextForm(None)

def create(self):
self.value = None
self.wgName = self.add(np.TitleText, name = "Name:",)
self.wgDept = self.add(np.TitleText, name = "Dept:")
self.wgEmp = self.add(np.TitleText, name = "Employed:")

def beforeEditing(self):
if self.value:
self.name = "Is this correct?"
self.wgName.value = self.myName.value
self.wgDept.value = self.myDepartment.value
self.wgEmp.value = self.myDate.value

def on_cancel(self):
self.parentApp.switchFormPrevious()


class myApp(np.NPSAppManaged):
def onStart(self):
self.addForm('MAIN', EmployeeForm, name='Employee Entry')
self.addForm('CONFIRMFM', EmployeeConfirmForm, name='Employee Confirmation')

if __name__ == '__main__':
TestApp = myApp().run()

最佳答案

我还没有找到直接在表单之间传递变量的直接方法。但是,您可以通过使用在表单之间具有全局范围的变量来解决这个问题。

NPSAppManaged 应用程序类完全封装运行,因此如果您尝试在 Python 文件顶部声明全局变量,其中的表单将无法访问它们。相反,在 onStart 方法之前声明 NPSAppManaged 应用程序类中的变量,如下所示。

class myApp(np.NPSAppManaged):

# declare variables here that have global scope to all your forms
myName, myDepartment, myDate = None, None, None

def onStart(self):
self.addForm('MAIN', EmployeeForm, name='Employee Entry')
self.addForm('CONFIRMFM', EmployeeConfirmForm, name='Employee Confirmation')

if __name__ == '__main__':
TestApp = myApp().run()

然后您可以使用 self.parentApp.[variable name] 访问这些变量,如下所示:

class EmployeeConfirmForm(np.Form):
def afterEditing(self):
self.parentApp.setNextForm(None)

def create(self):
self.add(np.FixedText, value = "Is this correct?")
self.wgName = self.add(np.TitleText, name = "Name:", value = self.parentApp.myName)
self.wgDept = self.add(np.TitleText, name = "Dept:", value = self.parentApp.myDepartment)
self.wgEmp = self.add(np.TitleText, name = "Employed:", value = self.parentApp.myDate)

def on_cancel(self):
self.parentApp.switchFormPrevious()

注意:您不需要单独的 beforeEditing 方法,因为值将在 期间直接加载到 EmployeeConfirmForm >从应用程序类全局变量创建方法。

关于python-curses - 使用 npyscreen 在表单之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34366189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com