0

我试图在 jupyter notebook 中使用 pyviz 为其他人创建某种形式来填充数据。然后单击保存按钮将这些数据保存到嵌套列表中。然后你对每个人重复一遍。

然后我需要一个按钮来显示嵌套列表的当前输入。

有人能指出我正确的方向吗?到目前为止,我只有输入字段,列表总是空的。

# companies at which people are working
company = ['wal', 'even', 'foot']
class Company(param.Parameterized):
    # dropdown of company
    company = param.ObjectSelector(objects=company)
    # name of person
    personname = param.String(doc="name")
    # age of person
    age = param.Number(0)
    # save to list button
    save_btn = param.Action(lambda self:self.param.trigger('save_btn'),doc="""Save""")
    # show list
    show_btn = param.Action(lambda self: self.param.trigger('show_btn'),doc="""Show dicitonary""")
    # dict which collects all input
    all_persons = []
    # return content of dict
    @param.depends('show_btn')
    def show_list(self):
        return self.all_persons
    # save form content to dict
    @param.depends('save_btn')
    def save_to_list(self):
        temp_list = []
        temp_list.append[self.company]
        temp_list.append[self.personname]
        temp_list.append[self.age]
run = Company()

pn.Column(run.param.company, run.param.personname,     run.param.age,run.param.save_btn,run.param.show_btn, run.show_list)

# desired nested list
# [['wal', "bob", "34"], ["foot", "anna", "56"]]
4

1 回答 1

0

您的代码包含一些拼写错误和松散的结尾。从上到下:

  • all_persons被定义为空列表,但从未连接到方法中创建的临时列表save_to_list()
  • @param.depends(...)不见了watch=True,例如@param.depends('show_btn', watch=True)
  • show_list()返回self.all_persons,但此变量从未在任何地方使用

例如:

company = ['A', 'B'] # simplified code
class Company(param.Parameterized):
    company = param.ObjectSelector(default=company[0], objects=company)
    person_name = param.String(doc="name")
    age = param.Number(0)

    save_btn = param.Action(lambda self: self.save_to_list() , doc="""Save""") # no need for param.trigger here...
    print_btn = param.Action(lambda self: self.print_list() , doc="""Print""") # no need for param.trigger here...

    all_persons = [] # starts with an empty list

    # no need for param.depends, as the method directly is called via param.Action, 
    def save_to_list(self):
        print('safe to list: {}, {}, {}'.format(self.company, self.person_name, self.age))
        temp_list = []
        temp_list.append(self.company) # use () for append, not []
        temp_list.append(self.person_name)
        temp_list.append(self.age)
        print('temp_list: {}'.format(temp_list))
        self.all_persons.append(temp_list)

    # no need for param.depends, as the method is directly called via param.Action, 
    def print_list(self):
        print('all_persons: {}'.format(self.all_persons))

run = Company()

layout = pn.Row(run.param)
layout.app() # to see print statements in a notebook, use the server variant via 'app()'
于 2019-11-09T18:20:59.437 回答